3

我有一个使用战争覆盖的多模块项目,我们有一个经常部署快照的持续集成服务器。我有这样的问题,如果我mvn compile在 CI 服务器部署它之后立即执行,我的构建会得到我的本地更改还是 CI 更改?如何强制我的项目使用我在本地更改的战争覆盖?我install认为可以做到这一点,但是如果 CI 服务器构建具有更新时间戳的版本怎么办。它会使用哪一个?

这只是我遇到的许多问题中的一小部分,我在 maven 文档上找不到权威的答案。但是,即使我可以,我也可能会马上回到这里并请某人更好地解释文档:P 所以,我问,maven 用来查找它的依赖项的顺序/逻辑是什么?

4

3 回答 3

3

就 Maven 而言,从你的战争覆盖生成的工件将只是另一个工件。

如果我在 CI 服务器部署它之后立即进行 mvn 编译,我的构建会得到我的本地更改还是 CI 更改?

这将取决于设置文件中的快照 updatePolicy。默认情况下设置为每天。更多细节在这里:http ://maven.apache.org/settings.html#Repositories

如何强制我的项目使用我在本地更改的战争覆盖?

将快照 updatePolicy 更改为从不(或 -o 选项,由 @matsev 建议)。这意味着您使用的 SNAPSHOT 依赖项将始终是本地版本。要使用此 updatePolicy强制从存储库中获取最新版本,请使用 -U 选项。

我认为安装可以做到这一点,但如果 CI 服务器构建具有更新时间戳的版本怎么办。它会使用哪一个?

是的,安装基本上会将您的工件部署到您的本地存储库(.m2 文件夹)。然后,根据 updatePolicy,maven 将比较本地部署的工件和存储库工件。如果 updatePolicy 设置为always ,如果它具有较新的时间戳,maven 将始终获取存储库之一。每天也是如此,除了 maven 只会每天比较时间戳。

我在 maven 文档上找不到权威的答案。

完全同意。可悲的是,我部分通过经验了解其中的大部分内容。

于 2013-06-12T15:54:12.090 回答
1

您可以使用-o( --offline) 选项强制 Maven 使用您的本地文件,例如

mvn -o clean install 

请参阅Maven 命令行选项以供参考(或简单地执行mvn -h)。

于 2013-06-11T19:05:38.673 回答
0

e 知道项目的依赖项是在 pom.xml 中声明的。Apache Maven 使用存储库的概念来保​​存 JAR 文件。有两种存储库,本地存储库和远程存储库。您可以在 maven/conf 目录或 pom.xml 本身的 settings.xml 中定义它。当我们通过执行 mvn install 命令启动 Maven 构建过程时,它首先在本地存储库中搜索依赖 JAR,如果找到则使用,否则它会转到远程存储库下载相应版本的 JAR 文件并存储到本地存储库中. 还有一件事,值得记住的是依赖类型。如果您已包含 SNAPSHOT JAR,例如 1.2-SNAPSOT 作为依赖项的一部分,与常规稳定版本 1.2 相反

于 2013-09-03T14:30:28.000 回答