maven整理总结(四)——pom.xml以及Maven项目的继承与聚合

官网地址: http://maven.apache.org/pom.html
搜索项目需要的依赖: https://mvnrepository.com/

pom.xml介绍

项目对象模型(POM)是Maven中的基本工作单元。它是一个XML文件,包含有关项目的信息和Maven用于构建项目的配置细节。它包含大多数项目的默认值。例如构建目录,它是target源目录,即src/main/java;测试源目录,即src/test/java;等等。在执行任务或目标时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。

常见的pom.xml包含以下信息

<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">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <packaging>jar</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>Maven Quick Start Archetype</name>
 <url>http://maven.apache.org</url>
 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.11</version>
     <scope>test</scope>
   </dependency>
 </dependencies>
</project>
<pom.xml>elementsDescription
project所有pom.xml文件的顶级元素
modelVersion该POM使用的对象模型的版本。
groupId创建项目的组织或组的唯一标识符。例如org.apache.maven.plugins,为所有Maven插件指定的groupId。
artifactId工件名,也是实际项目的名称。项目的主要工件通常是一个JAR文件。由Maven生成的工件将具有-的形式(例如myapp-1.0.jar)。
version项目生成工件的版本
packaging此工件使用的包装类型(例如JAR,WAR,EAR等),默认是jar,大多数项目可以不设置。
name用于项目的显示名称。
url指示可以在哪里找到项目的站点
description项目的基本描述。
dependencies该项目所需要的依赖
<dependency>elementDescription
groupId同上
artifactId同上
version同上
scope依赖项的范围- compile, runtime, test, system, provided。用于计算用于编译,测试等的各种类路径。它还有助于确定要在此项目的分发中包括哪些工件。

Super POM

http://maven.apache.org/ref/3.6.3/maven-model-builder/super-pom.html

Super POM是Maven的默认POM , 除非显式地设置,否则所有POM都扩展Super POM,这意味着在Super POM中指定的配置由您为项目创建的POM继承。

项目继承

合并的POM中的元素如下:

  • 依存关系
  • 开发者和贡献者
  • 插件列表(包括报告)
  • 具有匹配ID的插件执行
  • 插件配置
  • 资源

Super POM是项目继承的一个示例,但是您也可以通过在POM中指定父元素<parent>来设置自己的 parent POM

例如: 如果要将com.mycompany.app:my-app:1转换为com.mycompany.app:my-module:1的父工件,则必须对com.mycompany.app:my-module: 1的POM进行以下配置

<!--com.mycompany.app:my-app:1's POM-->
<project>
	...
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
   ...
</project>
<!--com.mycompany.app:my-module:1's POM-->
<project>
 	...
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
    ...
</project>

第一种情况:目录结构如下,父pom.xml比module的pom.xml高一个目录

--my-module
	--pom.xml
--pom.xml

现在添加一个父部分。这个部分允许我们指定哪个工件是POM的父组件。我们通过指定父POM的完全限定工件名称来实现这一点。通过这种设置,我们的模块现在可以继承父POM的一些属性。

<!--com.mycompany.app:my-module:1  pom.xml-->
<project>
	...
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
  </parent>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
    ...
</project>

或者,如果我们希望您模块的groupId或版本与它们的父模块相同,您可以在其POM中删除模块的groupId或版本标识 , 这允许模块继承其父POM的groupId和/或版本。

<!--com.mycompany.app:my-module:1  pom.xml-->
<project>
	...
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
  </parent>
 
  <artifactId>my-module</artifactId>
    ...
</project>

第二种情况:目录结构如下,父pom.xml和module的pom.xml在同一个层次

--my-module
	--pom.xml
--parent
	--pom.xml

需要将<relativePath>添加到<parent>中, 它是从module的pom .xml到父的pomm .xml的相对路径。

<!--com.mycompany.app:my-module:1  pom.xml-->
<project>
  <modelVersion>4.0.0</modelVersion>
 
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent>
 
  <artifactId>my-module</artifactId>
</project>

项目聚合

项目聚合类似于项目继承。但是它不是从模块指定父POM,而是从父POM指定模块。通过这样做,父项目知道它的模块,如果对父项目调用Maven命令,那么该Maven命令也将对父项目的模块执行。

要进行项目汇总,您必须做到以下几点:
将父POM packaging的值更改为"pom"。
在父POM中指定其模块(子POM)的目录。

第一种情况:目录结构如下,父pom.xml比module的pom.xml高一个目录

--my-module
	--pom.xml
--pom.xml

在父pom.xml里面增加<modules>值为子模块的名称,并且要增加<packaging>值为pom

<!--com.mycompany.app:my-app:1's POM-->
<project>
 ...
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
  <packaging>pom</packaging>
 
  <modules>
    <module>my-module</module>
  </modules>
    ...
</project>

第二种情况:目录结构如下,父pom.xml和module的pom.xml在同一个层次

--my-module
	--pom.xml
--parent
	--pom.xml

在父pom.xml里面增加<modules>值为父pom到子模块的相对路径,并且要增加<packaging>值为pom

<!--com.mycompany.app:my-app:1's POM-->
<project>
 ...
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
  <packaging>pom</packaging>
 
  <modules>
    <module>../my-module</module>
  </modules>
    ...
</project>

项目继承与聚合

但是,当然,您可以同时具有项目继承和项目聚合。意思是,您可以让您的模块指定一个父项目,同时让该父项目将那些Maven项目指定为其模块。您只需要应用所有三个规则:

1、在每个子POM中指定其父POM谁。
2、将父POM packaging的值更改为值“ pom”。
3、在父POM中指定其模块的目录(子POM)

目录结构

--my-module
	--pom.xml
--parent
	--pom.xml
<!--com.mycompany.app:my-app:1's POM-->
<project>
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
  <packaging>pom</packaging>
 
  <modules>
    <module>../my-module</module>
  </modules>
</project>
<!--com.mycompany.app:my-module:1's POM-->
<project>
  <modelVersion>4.0.0</modelVersion>
 
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent>
 
  <artifactId>my-module</artifactId>
</project>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值