2014-10-29 213 views
0

我有一个包含多个模块的maven项目。当我释放它时,我只是将模块的版本从SNAPSHOT更改为发布版本及其正常。这可以通过Maven Release Plugin完成。使用Maven发布项目:工件的不同发布版本

问题出现是因为我拥有的一些依赖关系实际上是由我们程序员的其他团队开发的工件。因此,他们的版本可能经常发生变化,这是与其他依赖关系相反的行为,例如hibernate的工件版本。在发布的那一刻,我想使用一些快速变化的库的可用版本。可能是最后一个。可能他们会为我的发布专门发布他们的图书馆的新版本。 请注意,它们的库是一个独立的Maven项目,由它们控制单独的版本。

我现在所能做的只是手动检查哪个版本的依赖关系是最后一个版本,并手动将其放到我的POM中。它不那么方便。可能有更好的方式来组织它与Maven和TeamCity?我能否更新其他组的工件的版本?他们的版本应该来自他们的Snapshot版本,或者来自他们已经部署到Nexus的最后一个版本。

+0

你怎么跑您的版本?你使用的工具如哈德森/詹金斯?你在哪里拿着你使用的罐子(经常改变) - 在Artifactory/Nexus中? – OhadR 2014-10-29 21:18:40

+0

我使用TeamCity。是的,经常更换的罐子由某些团队在某些存储库中开发,然后部署到Nexus中。 – MiamiBeach 2014-10-30 19:01:58

回答

0

如前所述,您可以使用Versions Maven Plugin,更具体地说,您需要versions:update-properties。正如你可以阅读手册,它

将属性设置为最新版本的特定工件。

条件是您使用存储库管理器(例如Artifactory)。 Maven知道在这个回购中搜索最新的aritfacts。

在运行maven-release-plugin之前,您需要运行更新依赖项的versions-plugin。例如,您使用相关参数运行versions:update-properties

如果你想打印最新版本的工件,相同的版本插件是你的朋友。仔细看看我上面发给你的链接;相关的命令是versions:display-dependency-updates

如果您想有选择地打印,只有您的工件最新版本,您可以使用属性设置其版本。例如,如果你有相关性JAR X,写在主POM是这样的:

<dependency> 
    <groupId>myGroup</groupId> 
    <artifactId>X</artifactId> 
    <version>${x.version}</version> 
</dependency> 

<properties> 
    <x.version>3.1.0.RELEASE</x.version> 
</properties> 

然后使用versions:display-property-updates -DincludeProperties="x.version"

+0

好主意!看起来我可以指定要替换的版本的groupID和artifactID。但首先我想打印它们。你知道是否有可能打印最新版本的工件,但受限于某些组:工件,因为打印都太多了。 – MiamiBeach 2014-10-31 14:58:06

+0

我已经更新了我的答案(至于您的打印问题)。如果这个答案有帮助,比接受/ + 1它:-) – OhadR 2014-10-31 15:10:03

+0

你的意思是版本:display-dependency-updates?但是没有包含参数.. – MiamiBeach 2014-10-31 16:25:52