gpt4 book ai didi

java - 如何在多模块 Maven 项目设置中为所有子级设置不同版本

转载 作者:行者123 更新时间:2023-11-30 07:18:49 31 4
gpt4 key购买 nike

我们有多模块项目设置,对不同模块版本有很多依赖性。

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 总是选择最新版本。因此旧的 jar 不会被选择。有些人说你总是必须指定父版本。幸运的是,它被继承为大多数情况下所需的模块版本。此外,这个父版本声明会被 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>

<小时/>

版本.属性

<小时/>

早些时候 -

  • 父版本=16.3.0.1.0
  • child1-version=16.3.0.1.0
  • child2-version=16.3.0.1.0

    现在-

  • 父版本=16.5.0.0.0
  • child1-version=16.3.0.1.0
  • child2-version=16.5.0.0.0

  • 最佳答案

    我认为你正在做一些危险的事情。

    问题是,如果我没有理解错的话,您只是尝试仅使用新版本构建一些库,而使用旧版本构建一些库。在 Maven 中,通常如果某个东西有非快照版本,它会被视为“已发布”,因此是稳定的,它不会再次尝试更新它。因此,这可以描述您对使用旧版本的观察。

    通常,您会将项目放在 3.0.1-SNAPSHOT 中并使用它。在这种情况下,您始终会收到更新。

    现在这种方法还存在其他问题。您可以发布新版本,每个模块都有自己的版本,没有任何问题。问题是,如果你尝试用你已经使用过的版本发布某些东西,事情就会崩溃。现在您可以限制您的 Maven react 器仅发布您想要发布的模块,从而避免此问题。不幸的是,您将遇到下一个问题,因为 Maven 只会更新属于当前构建的模块的版本。因此,在这种情况下,对未发布的模块的任何 SNAPSHOT 依赖都将保留为 SNAPSHOT,并且发布插件将因此失败。

    几年前,我有一位客户需要按照您描述的方式发布各个模块。我确实解决了这个问题,但这并不容易。简而言之:我必须通过更改一两行代码来修补发布插件,然后我必须创建一个 Jenkins 插件来帮助我配置构建,因为它现在需要在命令行上进行疯狂的输入。我写下了所有关于:

    关于java - 如何在多模块 Maven 项目设置中为所有子级设置不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37946178/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com