我们有多模块项目设置,对不同的模块版本有很多依赖性。
ParentModule_16.3.0.1.0-
----ChildModule1_16.3.0.1.0
----ChildModule2_16.3.0.1.0
----ChildModule3_16.3.0.1.0
之前所有版本都在pom.xml中为每个模块进行了硬编码。后来我们决定从属性文件中获取这些版本。所以我按照下面的链接,它工作正常 -
Maven: set property in pom.xml from properties file
现在我们有一个场景,我们想要更新版本 childmodule2_ 16.3.0.1.0 至childModule2_ 16.6.0.0.0 和 parentModule_ 16.3.0.1.0 到parentModule_ 16.6.0.0.0 和休息保持不变。
现在我们面临的问题是,当我们使用父pom进行完全构建时,由于旧版本(16.3.0.1.0),它不会选择某些模块的jar。
我已经阅读了一些博客,其中maven总是选择最新版本。因此,旧的罐子没有被挑选。有些人说你总是需要指定父版本。幸运的是,它被继承为模块的版本,在大多数情况下是可取的。而且,这个父母的版本声明会被Maven Release Plugin自动提升。
有些人可以帮助我理解这一点。有什么方法可以解决这个问题吗?提前谢谢。
下面是我的父pom.xml
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>parent</artifactId>
<version>${parent-version}</version>
<packaging>pom</packaging>
<modules>
<module>chiled1</module>
<module>child2</module>
</modules>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>version.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
<!-- Make assembly -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptor>${project.basedir}/assembly.xml</descriptor>
<outputDirectory>${project.basedir}/dist</outputDirectory>
</configuration>
<executions>
<execution>
<id>create-archive</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
child2 pom.xml
<groupId>com.myproject.child1</groupId>
<artifactId>child2</artifactId>
<version>${child2-version}</version>
<build>
<finalName>${project.artifactId}-${version}</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>../version.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
version.properties
早些时候 -
NOW-
答案 0 :(得分:1)
我认为你正在做一些危险的事情。
问题是,如果我没有弄错你,你试图只用新版本构建一些libs,而用旧版本构建一些libs。在Maven中,通常如果某个东西有非SNAPSHOT版本,它会被视为“已发布”并因此保持稳定,并且它不会再次尝试更新。因此,这可以描述您对正在使用的旧版本的观察。
通常你会将你的项目放在3.0.1-SNAPSHOT中并使用它。在这种情况下,您将始终获得更新。
现在这种方法存在其他问题。你可以发布一个新版本,每个模块都有自己的版本,没有任何问题。问题是如果你试图用你已经使用过的版本发布一些东西,事情会爆发。现在,您可以限制Maven reactor仅释放要释放的模块,并避免此问题。不幸的是,您将遇到下一个问题,因为Maven只会更新当前版本的模块版本。因此,在这种情况下,对未被释放的模块的任何SNAPSHOT依赖都将保持SNAPSHOT,并且发布插件将因此失败。
几年前,我的客户需要按照您描述的方式发布单个模块。我确实解决了这个问题,但这并不容易。简而言之:我必须通过更改一行或两行代码来修补发布插件,然后我必须创建一个Jenkins插件来帮助我配置构建,因为它现在需要在命令行上输入疯狂的内容。我写下了关于的一切: