我有两个项目:父项目:A,子项目:B
一个/ pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
在B/pom.xml中,我有:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
我想要B继承父版本,所以在我的情况下,我需要把0.1-SNAPSHOT的唯一地方是A/pom.xml。但是如果我从父部分的B/pom.xml中删除<version>0.1-SNAPSHOT</version>, maven会抱怨父部分缺少版本。
是否有一种方法可以使用${project。Version}或类似的东西,以避免出现01。-快照在两个poms?
It worked for me using BOM approach on parent pom.xml:
My scenario:
- parent pom.xml 0.0.0.1-SNAPSHOT
- sub-project1
- sub-project2 (sub-project1 is a dependency)
<properties>
<revision>0.0.0.1-SNAPSHOT</revision>
</properties>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>commons</name>
<description>parent module of commons project</description>
<modules>
<module>sub-project1</module>
<module>sub-project2</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<type>pom</type>
<version>2.6.4</version>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.example.commons</groupId>
<artifactId>sub-project1</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目pom.xml可以从父项目继承${revision}编号,而且实际列出的依赖项不需要显式地提到标记
<parent>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.example.commons</groupId>
<artifactId>sub-project2</artifactId>
<version>${revision}</version>
<name>sub-project2</name>
<description>implement sub-project2 </description>
<dependencies>
<dependency>
<groupId>com.example.commons</groupId>
<artifactId>sub-project1</artifactId>
</dependency>
</dependencies>
从Maven 3.5.0开始,您可以使用${revision}占位符。这里记录了使用方法:Maven CI友好版本。
简而言之,父pom看起来是这样的(引用自Apache文档):
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<modules>
<module>child1</module>
..
</modules>
</project>
孩子们像这样跳
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<version>${revision}</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-child</artifactId>
...
</project>
您还必须使用Flatten Maven Plugin生成pom文档,其中包含用于部署的专用版本号。HowTo在链接的文档中有详细的说明。
@khmarbaise也写了一篇关于这个功能的不错的文章:Maven:没有版本的POM文件?
foxx的答案适用于单个项目,但当我从另一个项目引用一个模块时就不适用了(pom.xml仍然存储在我的.m2中,带有属性而不是版本)。
然而,如果你将它与flat -maven-plugin结合使用,它就可以工作,因为它会生成具有正确版本的poms,而不是属性。
我在插件定义中唯一更改的选项是outputDirectory,默认情况下它是空的,但我更喜欢将它放在target中,这是在我的.gitignore配置中设置的:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<updatePomFile>true</updatePomFile>
<outputDirectory>target</outputDirectory>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
插件配置放在父文件pom.xml中
It worked for me using BOM approach on parent pom.xml:
My scenario:
- parent pom.xml 0.0.0.1-SNAPSHOT
- sub-project1
- sub-project2 (sub-project1 is a dependency)
<properties>
<revision>0.0.0.1-SNAPSHOT</revision>
</properties>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>commons</name>
<description>parent module of commons project</description>
<modules>
<module>sub-project1</module>
<module>sub-project2</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<type>pom</type>
<version>2.6.4</version>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.example.commons</groupId>
<artifactId>sub-project1</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目pom.xml可以从父项目继承${revision}编号,而且实际列出的依赖项不需要显式地提到标记
<parent>
<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.example.commons</groupId>
<artifactId>sub-project2</artifactId>
<version>${revision}</version>
<name>sub-project2</name>
<description>implement sub-project2 </description>
<dependencies>
<dependency>
<groupId>com.example.commons</groupId>
<artifactId>sub-project1</artifactId>
</dependency>
</dependencies>