给父母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.acme</groupId>
<artifactId>acme-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java-version>1.8</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<com.acme.dynamite-version>0.0.1-SNAPSHOT</com.acme.dynamite-version>
// etc
</properties>
</project>
Run Code Online (Sandbox Code Playgroud)
和孩子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.acme</groupId>
<artifactId>child</artifactId>
<version>dev-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>com.acme</groupId>
<artifactId>acme-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.acme</groupId>
<artifactId>dynamite</artifactId>
<version>${com.acme.dynamite-version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
com.acme.dynamite-version在子pom中显式引用的属性将被解析,但会project.build.sourceEncoding被忽略.'mvn clean install'的Jenkins构建会发出警告:
[警告]使用平台编码(实际上是UTF-8)来复制过滤后的资源,即构建依赖于平台!
有没有办法让孩子pom认出来project.build.sourceEncoding?这不是一个多模块项目,我只是想在一个地方整合属性
在父POM 中定义的属性在子POM 中继承 ...但是为此,需要在构建子项之前安装定义这些属性的父POM.这是问题所在:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>.但是,定义此属性的父版本未安装在本地存储库中.maven-resources-plugin由于没有设置编码,因此将发出此警告.(project.build.sourceEncoding默认情况下还设置此插件使用的编码).解决方案是首先构建父级.
在多模块Maven项目中,您只需构建父项:Maven将以这样的方式对反应堆进行排序,即首先构建依赖项目; 因此,在这种情况下,将首先构建父代,然后构建子代(或本例中的模块),从而确保子代中可以访问父级中定义的所有属性.
在多模块Maven项目之外,这个想法仍然是相同的,但是您需要执行两个不同的构建:首先是将正确版本安装到本地存储库中的父级,然后是子级.请注意,当这些父项不用作聚合器项目时,更多的是作为构建块来整合子项继承的公共属性时,最好有一个独特的发布周期:考虑发布父项,以便每个child可以继承该特定版本.