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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
执行mvn clean install出现[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building springboot-schema 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ Downloading: http://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-maven-plugin/2.2.2.RELEASE/spring-boot-maven-plugin-2.2.2.RELEASE.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.419 s [INFO] Finished at: 2023-07-22T19:52:51+08:00 [INFO] Final Memory: 9M/245M [INFO] ------------------------------------------------------------------------ [ERROR] Plugin org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.springframew ork.boot:spring-boot-maven-plugin:jar:2.2.2.RELEASE: Could not transfer artifact org.springframework.boot:spring-boot-maven-plugin:pom:2.2.2.RELEASE from/to central (http://repo.maven. apache.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-maven-plugin/2.2.2.RELEASE/spring-boot-maven-plugin-2.2.2.RELEASE. pom. Return code is: 501 , ReasonPhrase:HTTPS Required. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException PS C:\Users\16283\Desktop\springbootc8hzm>
07-23

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值