zoukankan      html  css  js  c++  java
  • 04-maven学习-pom.xml解析

    pom.xml里面各个配置的含义如下:

    <!-- 主项目标识,表示当前maven属于哪个实际项目,与包是一样的 -->
         <groupId>反写的公司网址+项目名</groupId>
         <!-- 模块标识-->
         <artifactId>项目名+模块名</artifactId>
         <!-- 
            版本号,一般由三个数字组成
            第一个0,表示大版本号,
            第二个0表示分支版本号,
            第三个0表示小版本号,
            snapshot 快照
            beta 公测
            alpha 内测
            Release 稳定
            GA正式发布
          -->
         <version></version>
         <!-- 打包的方式,默认为jar,还可以打包成war,zip,pom -->
         <packaging></packaging>
      
         <!-- 项目描述名 -->
         <name></name>
         <!-- 项目的地址 -->
         <url></url>
         <!-- 项目的描述 -->
         <description></description>
         <!-- 开发人员信息 -->
         <developers></developers>
         <!-- 许可证信息 -->
         <licenses></licenses>
         <!-- 组织信息 -->
         <organization></organization>
      
        <!--  依赖列表-->
        <dependencies>
            <!-- 依赖项 -->
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
                <type></type>
                <!-- 依赖的范围 -->
                <scope></scope>
                <!-- 设置依赖是否可选,默认false。 -->
                <optional></optional>
                <!-- 排除依赖传递列表 -->
                <exclusions>
                    <exclusion>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <!-- 依赖的管理 -->
        <dependencyManagement>
             <dependencies>
                 <dependency></dependency>
             </dependencies>
        </dependencyManagement>
    
    
        <build>
            <!-- 插件列表 -->
            <plugins>
                <plugin>
                  <groupId></groupId>
                  <artifactId></artifactId>
                  <version></version>
                </plugin>
            </plugins>
        </build>
     
        <!-- 用于子模块对父模块pom的继承 -->
        <parent></parent>
        <!-- 用来聚合多个maven项 -->
        <modules>
            <module></module>
        </modules>

    例如上一节创建的如下:

      <groupId>org.maven.mavenDemo</groupId>
      <artifactId>mavenDemo01</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
      
      <name>mavenDemo01</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>

    依赖范围:<scop>

    三种classpath:

    • 编译
    • 测试
    • 运行

    scop选项:

    • compile:默认的范围,编译测试运行都有效
    • provided:在编译和测试时候有效
    • runtime:在测试和运行时有效
    • test:只在测试范围有效
    • system:与本机系统相关联,可移植性差。
    • import:导入的范围,只使用在dependenceManagement中。表示从其他的pom中导入dependecy的配置

    依赖传递

    这里建立三个maven项目演示

    demo02要依赖demo01,要想依赖,必须在本地仓库安装demo01的项目

    首先对demo01进行如下操作:

    1,右键demo01,使用maven方式运行,将其打包:

    2,将mavendemo01安装到本地仓库中,同样执行maven方式运行,执行install命令。

     

    在demo02中加入demo01的依赖:

      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
                <groupId>org.maven.mavenDemo</groupId>
              <artifactId>mavenDemo01</artifactId>
              <version>0.0.1-SNAPSHOT</version>
        </dependency>
        
      </dependencies>

    如下:

    同样方式将demo02安装,为了省去操作,同时执行两个命令:clean  install

    在demo03中依赖demo02项目。

      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
              <groupId>org.maven.mavenDemo</groupId>
              <artifactId>mavenDemo02</artifactId>
              <version>0.0.1-SNAPSHOT</version>
        </dependency>
      </dependencies>

    同样对demo03安装到本地仓库。

    观察mavenDemo03的依赖包发现,demo03本来只想依赖demo02,但是连demo01也依赖了,

    这表明依赖具有传递性

    要想不依赖demo01,使用exclusions,可以排除demo01的依赖。

      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
              <groupId>org.maven.mavenDemo</groupId>
              <artifactId>mavenDemo02</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <exclusions>
                  <exclusion><!--下面填入mavenDemo01的坐标-->
                      <groupId>org.maven.mavenDemo</groupId>
                      <artifactId>mavenDemo01</artifactId>
                  </exclusion>
              </exclusions>
        </dependency>
      </dependencies>

    保存后发现只剩demo02的依赖了。

    依赖冲突

    解决依赖冲突的两条原则:

    1,短路优先:A->B-C->X(jar)

           A->D->X(jar)

    由于第二条路比较短,会依赖第二条的方式。

    2,先声明先优先:

    如果路径长度相同,则谁先声明,先解析谁。

     聚合和继承

    聚合

     如果想要将多个项目进行install,安装到本地仓库中,必须对其依次进行install命令。

    而聚合可以将多个项目放到一起运行,同时安装。

    例如:将前面的三个项目聚合,一起安装。

    新建一个mavenDemo04,在pom.xml里面配置如下:

    首先把packaging改成pom

      <groupId>org.maven.mavenDemo</groupId>
      <artifactId>mavenDemo04</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>

    然后添加聚合标签:分别加入要安装的三个项目

        <modules>
            <module>
                ../mavenDemo01
            </module>
            <module>
                ../mavenDemo02
            </module>
            <module>
                ../mavenDemo03
            </module>
        </modules>

    而这里的dependency无所谓了,可以删除。

    然后运行maven命令,执行 clean  install命令。

    此时就同时安装了三个项目到本地仓库。

     继承

    例如对于之前的三个项目中,每个项目都依赖了一个junit,其实这样重复了很多,可以使用继承方式代替这种。

    1,新建一个demo5,demo5中定义如下:

      <groupId>org.maven.mavenDemo</groupId>
      <artifactId>mavenDemo05</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>
    
      <name>mavenDemo05</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <junit.version>3.8.1</junit.version>
      </properties>
      
    
        <dependencyManagement>
              <dependencies>
                <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>${junit.version}</version>
                  <scope>test</scope>
                </dependency>
              </dependencies>
        </dependencyManagement>

    一共关注三点:

    1,将packaging改为pom

    2,在properties中新增一共junit.version属性。然后可以在version标签中通过${属性名}的方式使用。

    3,新增一个dependencyManagement标签,将dependencyies标签放进去。

    假如在demo3中继承这里。

    demo3中junit依赖定义如下:

      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    </dependencies>

    修改,需要将上面的红色部分删除,然后添加一个parent标签。parent标签引入demo05的坐标。

        <parent>
              <groupId>org.maven.mavenDemo</groupId>
              <artifactId>mavenDemo05</artifactId>
              <version>0.0.1-SNAPSHOT</version>
        </parent>
        
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
        </dependency>
        
        <dependency>
              <groupId>org.maven.mavenDemo</groupId>
              <artifactId>mavenDemo02</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <exclusions>
                  <exclusion>
                      <groupId>org.maven.mavenDemo</groupId>
                      <artifactId>mavenDemo01</artifactId>
                  </exclusion>
              </exclusions>
        </dependency>
      </dependencies>
  • 相关阅读:
    洛谷 1842 [USACO05NOV]奶牛玩杂技【贪心】
    洛谷 1757 通天之分组背包【分组背包】
    洛谷 1330 封锁阳光大学
    洛谷 1019 单词接龙
    【模板】CDQ分治
    BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
    BZOJ 2457 [BeiJing2011]双端队列
    洛谷 2015 二叉苹果树
    牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间
    牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
  • 原文地址:https://www.cnblogs.com/alsf/p/8372894.html
Copyright © 2011-2022 走看看