Maven常用一些标签和知识

常见配置配置
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <!-- 版本:4.0.0 --> 
    <modelVersion>4.0.0</modelVersion> 
    <!-- 组织名称:暂时使用 组织名称+项目名称 作为组织名称 --> 
    <!-- 组织名称:实际名称 按照访问路径规范设置,通常以功能作为名称: eg: junit spring --> 
    <groupId>com.kkb.maven</groupId> 
    <!-- 项目名称 --> 
    <artifactId>HelloWorld</artifactId> 
    <!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 --> 
    <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号 --> 
    <version>0.0.1</version> 
    <!-- 名称:可省略 --> 
    <name>Hello</name> 
    <!-- 依赖关系 --> 
    <dependencies> 
        <!-- 依赖设置 --> 
        <dependency> 
            <!-- 依赖组织名称 --> 
            <groupId>junit</groupId> 
            <!-- 依赖项目名称 --> 
            <artifactId>junit</artifactId> 
            <!-- 依赖版本名称 --> 
            <version>4.12</version> 
            <!-- 依赖范围:test包下依赖该设置 --> 
            <scope>test</scope> 
        </dependency> 
    </dependencies> 
</project>
当前项目的信息
  <groupId>:企业网址反写+项目名
  <artifactId>:项目名-模块名
  <version>:版本号+类型(snapshot快照版本(简化版本)、alpha内测版、beta公测版、release稳定版、GA正式发布版)
  <packaging>:打包类型,默认是jar,可以配置成war、zip、pom类型。1234
<name>:当前项目名
<url>:项目地址
<description>:项目描述信息
<developers>:开发者信息
<licenses>:项目许可证信息,用来发布时授予别人使用此项目的权利
<organization>:组织信息,企业信息
<properties>:属性值标签,也叫变量标签。
依赖标签
<dependencies>

    <!--一个依赖包-->
    <dependency>

       <!--通过坐标指定依赖包-->
        <groupId>        </groupId>
        <artifactId>      </artifactId>
        <version>        </version>

        <!--可选项:依赖范围。有六个可选值:常用compile/provided/test/runtime等-->
        <scope>一个范围</scope>
        <!--可选项:排除依赖传递:即:当前项目依赖当前配置的依赖包A时,如果这个依赖包又依赖其他包B,这里可以选择排除依赖的传递性,不下载导入B-->
         <exclusions>
            <exclusion>
              <!--被排除的依赖包坐标-->
              <groupId> </groupId>
              <artifactId> </artifactId>
              <version> </version>
            </exclusion>
         </exclusions>
    </dependency>
</dependencies>
依赖管理标签:

主要用于制定父pom.xml,其他项目可以继承这个pom.xml,从而避免重复定义某些depency。

  <dependencyManagement>
    <dependencies>
      <dependency>
        <!-- Import dependency management from Spring Boot -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${springboot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
build:项目支持标签,一般用来引入插件
<build>
    <plugins>
      <plugin>
         <!--插件坐标-->
         <groupId>         </groupId>
         <artifactId>         </artifactId>
         <version>         </version>

         其他设置...

      </plugin>
    </plugins>
</build>
构建插件
    <build>
      <!-- 
          Maven定制化打包后的包名
          Maven默认的包名为:<finalName>${project.artifactId}-${project.version}</finalName>
          定制化想要的包名,如加上时间戳:<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
      -->
      <finalName>myProject</finalName>  

      <!-- 插件列表 -->
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-source-plugin</artifactId>
              <version>2.4</version>
              <executions>
                  <execution>
                      <phase>package</phase>
                      <goals>
                          <goal>jar-no-fork</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>

      <!-- 插件管理列表,与dependencyManagement标签作用相似,管理插件版本号,让子项目继承使用 -->
      <pluginManagement>
          <plugins>
              <plugin>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <!-- 插件扩展配置 -->
                  <!-- 更详细的例子:http://my.oschina.net/zh119893/blog/276090 -->
                  <configuration>
                      <!-- 源代码编译版本 -->
                      <source>1.7</source>
                      <!-- 目标平台编译版本 -->
                      <target>1.7</target>
                      <!-- 设置编译字符集编码 -->
                      <encoding>${project.build.sourceEncoding}</encoding>
                  </configuration>
              </plugin>

          </plugins>
      </pluginManagement>
    </build>
  </project>
parent:继承标签,用于继承父项目。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
    <relativePath/>
</parent>
moudules:聚合标签

用于聚合多个maven项目,这样用某指令执行这个pom就会把聚合的各项目全部执行,同时处理多个项目。

    <modules>
        <module>a-demo</module>
        <module>b-client</module>
        <module>c-interface</module>
    </modules>
依赖冲突与解决
   依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同,那么A应该导入哪个版本的X包呢?

    冲突解决方案:

    1:如果依赖路径的长度不同,则“短路优先”:
         A—>B—>C—>D—>E—>X(version 0.0.1)
         A—>F—>X(version 0.0.2)
         则A依赖于X(version 0.0.2)。

     2:依赖路径长度相同情况下,则“先声明优先”:
         A—>E—>X(version 0.0.1)
         A—>F—>X(version 0.0.2)
         则在项目A的<depencies></depencies>中,E、F那个在先则A依赖哪条路径的X。
  • maven的继承与聚合(相关标签上面已列),更多用于模块化开发
    • 继承:
    • 1:创建父maven项目,在pom.xml中定义被共用的依赖:通过标签。
    • 2:在需要使用到共用依赖包的项目中继承父项目:通过标签
    • 聚合:
    • 创建项目E,在E的pom.xml中,首先修改E的为pom,表示项目E只是一个maven脚本文件,用于执行。然后通过标签进行聚合:
  • 依赖范围

    compile:默认范围,编译、测试、运行都有效
    provided:编译和测试有效,最后运行不会被加入,如tomcat依赖
    runtime:在测试和运行的时候有效,编译不会被加入,比如jdbc驱动jar
    test:测试阶段有效,比如junit
    system:与provided一致,编译和测试阶段有效,但与系统关联,可移植性差
    import:导入的范围,它只是用在dependencyManagement中,表示从其它的pom中导入dependency的配置

  • 依赖排除
    • 通过<exclusions>标签实现。

    A项目引用B项目依赖时,主动排除传递的C项目依赖,修改A项目pom.xml

<dependency>
    <groupId>com.jsun.test</groupId>
    <artifactId>B</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>com.jsun.test</groupId>
            <artifactId>C</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 通过true实现

    改B项目的pom.xml:

    <dependency>
          <groupId>com.mavan.demo</groupId>
          <artifactId>C</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <optional>true</optional>
        </dependency>
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值