• maven规定的目录


    Maven规定的目录结构

    若要使用Maven,那么项目的目录结构必须符合Maven的规范

    ,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。

    Maven基本命令

    1. -v:查询Maven版本

      本命令用于检查maven是否安装成功。

      Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。

    2. compile:编译

      将java源文件编译成class文件

    3. test:测试项目

      执行test目录下的测试用例

    4. package:打包

      将项目打成jar包

    5. clean:删除target文件夹

    6. install:安装

      将当前项目放到Maven的本地仓库中。供其他项目使用

    什么是Maven仓库?

    Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。

    • 本地仓库 
      Maven本地的Jar包仓库。
    • 中央仓库 
      Maven官方提供的远程仓库。

    当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。

    什么是“坐标”?

    在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

    如下代码中,groupId和artifactId构成了一个Jar包的坐标。

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.1</version>
    </dependency>
    • groupId:所需Jar包的项目名
    • artifactId:所需Jar包的模块名
    • version:所需Jar包的版本号

    传递依赖 与 排除依赖

    • 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用的Jar包都下载到本地。
    • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
    </exclusions>


    依赖冲突

    若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

    • 短路优先
    本项目——>A.jar——>B.jar——>X.jar
    本项目——>C.jar——>X.jar

    若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。

    在此时,Maven只会引用引用路径最短的Jar。

    聚合

    1. 什么是聚合?

      将多个项目同时运行就称为聚合。

    2. 如何实现聚合?

      只需在pom中作如下配置即可实现聚合:

    <modules>
            <module>../模块1</module>
            <module>../模块2</module>
            <module>../模块3</module>
        </modules>


    继承

    1. 什么是继承?

      在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。

      1. 如何实现继承?

        • 父pom配置:将需要继承的Jar包的坐标放入标签即可。
      <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.apache.shiro</groupId>
                      <artifactId>shiro-spring</artifactId>
                      <version>1.2.2</version>
                  </dependency> 
              </dependencies>
          </dependencyManagement>
      • 子pom配置:
      <parent>
          <groupId>父pom所在项目的groupId</groupId>
          <artifactId>父pom所在项目的artifactId</artifactId>
          <version>父pom所在项目的版本号</version>
      </parent>

    使用Maven构建Web项目

    1. New Maven项目:选择WebApp:

    2. 若使用JSP,需添加Servlet依赖:

      注:Servlet依赖只在编译和测试时使用!

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <!-- 只在编译和测试时运行 -->
        <scope>provided</scope>
    </dependency>

    10.

    pom.xml详解

    pom.xml是Maven的核心,你的项目需要什么Jar包就在pom.xml里面配置。当编译项目时Maven读取该文件,并从仓库中下载相应的Jar包。

    11.maven 自动读取pom文件,maven会自动查找和读取pom文件

    12.插件也是保存在仓库里的!是以maven坐标的方式!插件也有maven 同样的groupid和archifact id坐标方式,

    插件也是从仓库去下载的!

    <plugin>    
         <!--插件在仓库里的group ID-->    
         <groupId/>    
         <!--插件在仓库里的artifact ID-->    
         <artifactId/>    
         <!--被使用的插件的版本(或版本范围)-->    
         <version/>    
         <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->    
         <extensions/>    
         <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->    
         <executions>    
          <!--execution元素包含了插件执行需要的信息-->    
          <execution>    
           <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->    
           <id/>    
           <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->    
           <phase/>    
           <!--配置的执行目标-->    
           <goals/>    
           <!--配置是否被传播到子POM-->    
           <inherited/>    
           <!--作为DOM对象的配置-->    
           <configuration/>    
          </execution>    
         </executions>    
         <!--项目引入插件所需要的额外依赖-->    
         <dependencies>

     

  • 相关阅读:
    MySQL -- 表联结
    Unittest方法 -- 项目实现自动发送邮件
    Linux工作中常用命令
    Requests方法 -- Token获取操作
    Requests方法 -- 关联用例执行
    Requests方法 -- Blog流程类进行关联
    Requests方法 -- 参数化
    defer和async的区别
    js函数收藏:获取cookie值
    XSHELL使用技巧总结
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6692563.html
Copyright © 2020-2023  润新知