Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 是否使用依赖关系的最新快照?_Maven_Maven 2_Maven 3 - Fatal编程技术网

Maven 是否使用依赖关系的最新快照?

Maven 是否使用依赖关系的最新快照?,maven,maven-2,maven-3,Maven,Maven 2,Maven 3,更新:简化我的问题-我有一个模块mod1,它在模块mod2中用作依赖项。我想确保mod2始终使用mod1的最新版本快照。我如何在Maven中实现这一点 ================ 我有两个模块,其中一个模块用作另一个模块中的依赖项。如何确保mod1的最新快照始终在mod2中得到利用?这两个模块在父pom中提到如下- <modules> <module>mod1</module> <module>mod2</module>

更新:简化我的问题-我有一个模块mod1,它在模块mod2中用作依赖项。我想确保mod2始终使用mod1的最新版本快照。我如何在Maven中实现这一点

================

我有两个模块,其中一个模块用作另一个模块中的依赖项。如何确保mod1的最新快照始终在mod2中得到利用?这两个模块在父pom中提到如下-

<modules>
   <module>mod1</module>
   <module>mod2</module>
</modules> 

mod1
mod2
我在远程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>

com.test
mod2
最新的

但是,它始终解析为发行版1.0,而从不解析为本地repo中的1.1-SNAPSHOT。如何确保使用最新的快照?如果您有任何建议,我们将不胜感激。

通常,同一项目中的模块使用相同的版本,根本不在模块中指定版本。在这种情况下,Maven将依赖于父版本

通过该设置,
mod2/pom.xml
可以具有如下内容:

    <dependency>
        <groupId>com.test</groupId>
        <artifactId>mod1</artifactId>
        <version>${project.version}</version>
    </dependency>

com.test

有用。它可以管理您的项目、插件和依赖项版本,并根据需要进行升级

版本
-SNAPSHOT
已经包含了“最新”的概念

因此,我们的发布周期需要如下所示:

    <dependency>
        <groupId>com.test</groupId>
        <artifactId>mod1</artifactId>
        <version>${project.version}</version>
    </dependency>
在开始之前,您有:mod1版本是
1.0-SNAPSHOT
,mod2版本是
1.1-SNAPSHOT
,它取决于
mod1:1.0-SNAPSHOT

现在你想要释放。要做到这一点,您需要删除
-SNAPSHOT
无处不在,构建和部署

部署后,您将升级以下版本:

mod1版本现在是
1.1-SNAPSHOT
,mod2版本是
1.2-SNAPSHOT
,它取决于
mod1:1.1-SNAPSHOT


您永远不会遇到这样的情况,即mod2的快照版本依赖于mod1的发布版本。

我确实找到了解决方案。在依赖项下,添加以下内容:

<version>[1.0-SNAPSHOT,)</version>
[1.0-SNAPSHOT,)

如果快照不存在,它会选择最新版本,这正是我所需要的。

谢谢。如果我总是保留与mod2相同的mod1版本,那么你的建议会起作用。但是,我确实需要能够保留两者的不同版本。mod1还被多个其他模块使用。对于一个构建,mod2可能在没有mod1 c的情况下发生了更改挂起,在这种情况下,mod1不会生成,因此仍将具有早期版本,需要在mod2 pom中引用。但是,如果mod1随mod2一起更改,则两者将位于相同的新版本(1.1-SNAPSHOT)在这种情况下,我需要确保mod1的1.1-SNAPSHOT在mod2 pom中得到利用。可能吗?我不确定这是否可能。你最好的办法可能是使用版本插件管理mod1依赖版本的mod2的pom.xml。使用最新版本或类似的版本是不好的做法,因为构建永远不会稳定。根据你的评论,您不需要将资源安装到本地存储库,您应该能够从顶级目录进行编译。永远不要使用版本范围,因为这会使您的构建不可预测且不可复制。这实际上取决于您的使用情况和设置方式。这使我能够按照问题中的说明完成我想做的事情。我很想解释一下,当与Jenkins一起使用时,我如何能够使我的构建变得可预测和可复制,但这与这个问题无关。