更新:简化我的问题 - 我有一个模块mod1,它在模块mod2中用作依赖项。我想确保mod2始终使用mod1的最新版本快照。我怎样才能在Maven中实现这一目标?
=====
我有两个模块,其中一个模块用作另一个模块的依赖项。如何确保mod1的最新快照始终在mod2中使用?这两个模块在父pom中提到如下 -
<modules>
<module>mod1</module>
<module>mod2</module>
</modules>
我在远程maven repo(版本1.0)上有mod1的发行版。现在,在我的构建中,当mod1中存在代码通道时,它构建为1.1-SNAPSHOT(未部署在远程repo上)。如何确保mod2使用此(最新)快照版本?如果更改了mod1源,则需要在mod2中使用新版本1.1-SNAPSHOT,如果mod1没有源更改,则需要在mod2中使用现有的最新版本1.1。有谁能建议如何在这里始终使用最新的快照/发布?我试着在pom.xml中关注mod2 -
<dependency>
<groupId>com.test</groupId>
<artifactId>mod2</artifactId>
<version>LATEST</version>
</dependency>
但是,它始终解析为1.0版本,并且永远不会解析为1.1-SNAPSHOT,它位于本地仓库中。如何确保使用最新的快照?将不胜感激任何建议。
答案 0 :(得分:2)
版本-SNAPSHOT
已包含&#34;最新&#34;的概念。
所以我们的发布周期需要如下所示:
在你开始之前,你有:mod1版本是1.0-SNAPSHOT
,mod2版本是1.1-SNAPSHOT
,它取决于mod1:1.0-SNAPSHOT
现在你要发布。为此,您可以随处删除-SNAPSHOT
,构建&amp;部署。
部署后,您将碰撞版本:
mod1版本现在是1.1-SNAPSHOT
,mod2版本是1.2-SNAPSHOT
,它取决于mod1:1.1-SNAPSHOT
您永远不会遇到mod2的快照版本依赖于mod1的发布版本的情况。
答案 1 :(得分:1)
我确实找到了解决方案。在依赖项下,添加以下工作 -
<version>[1.0-SNAPSHOT,)</version>
如果没有快照,它会选择最新版本,这就是我需要的。
答案 2 :(得分:0)
通常,同一项目中的模块使用相同的版本,而根本不指定模块中的版本。在这种情况下,Maven将回归父母的版本。
通过该设置,mod2/pom.xml
可以具有以下内容:
<dependency>
<groupId>com.test</groupId>
<artifactId>mod1</artifactId>
<version>${project.version}</version>
</dependency>
在这种情况下,您根本不需要将mod1
安装到本地存储库。
只需从顶级目录运行mvn
命令,mod2
即可轻松解决mod1
问题。 Eclipse和Idea也将正确处理此设置。
如果您有需要安装mod1
的特定用例,或者您需要两个模块具有单独的版本号,请解释一下,因为它可能有助于您更好地回答这个问题。< / p>
最后,您可能会发现Versions plugin很有用。它可以管理您的项目,插件和依赖版本,并根据需要进行升级。