我正在使用Maven 3.5。我有一个多模块项目结构:模块A是父模块,有两个子模块B和模块C.
我的要求是:我想从Nexus获得某些第三方罐子的最新版本。这些基本上都是来自测试单位的罐子。请注意我不想拥有Snapshot版本。
我读到在pom.xml中指定RELEASE不适用于maven 3.x版本。但我尝试了它,它工作正常。 (仅使用IntelliJ获取信息)1)为什么它适合我?
2)我应该在Maven 3.5上使用RELEASE吗?
我还读到可以使用Maven“versions-maven-plugin”和目标“use-latest-releases”与Maven 3.x.我不确定如何使用它。我试过以下:
在我的模块A的父pom.xml中:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<goals>
<goal>use-latest-releases</goal>
</goals>
</execution>
</executions>
</plugin>
现在3)我在子模块中的依赖关系的版本标签中应该如何以及如何指定C?我写了如下:
<properties>
<!-- V dependencies -->
<version.vvv.iii.piiii></version.vvv.iii.piiii>
</properties>
<dependency>
<groupId>c.b.ttt</groupId>
<artifactId>V-RApi</artifactId>
<version>version.vvv.iii.piiii</version>
</dependency>
基本上我想知道如何实际使用这个特定的maven插件和目标。我为它阅读了Maven文档,但无法应用它。
1)它仍在工作,因为RELEASE版本功能尚未被禁用(即使它是“不良做法”,因为它违反了可重复构建的原则)。在另一个问题中回答的人也报告RELEASE仍然有效:
How do I tell Maven to use the latest version of a dependency?
2)如果您使用RELEASE,这取决于您。请注意,没有可重复的构建被广泛认为是不好的做法。想象一下,测试团队改变他们的api并释放他们的jar。您重建自己的项目,该项目需要测试团队jar的新版本,并且您的构建失败(即使您没有更改任何内容)。你必须权衡使用RELEASE的便利性。另外,持续ping你的神器服务器以获取最新版本(如果有很多版本)会降低你的构建速度。
3)如果你打算使用精确的verison编号(而不是RELEASE),我认为这是最好的方法,那么它们应该在模块A(不是模块C)中定义,或者甚至是模块A的父pom(那是我们如何在我的工作场所这样做)。在一个地方定义确切的版本号,并且在实际的模块层次中,通常是一件好事 - 它整洁且一致,不易出错和不一致。
编辑:
根据要求,这里是如何使用maven插件:mvn versions:use-latest-releases
,可能还有mvn versions:commit
阅读文档,特别是“使用”页面: