maven找到依赖关系的顺序是什么?

时间:2013-06-11 17:10:17

标签: maven dependency-management

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

这只是我所遇到的众多问题中的一小部分,我无法找到关于maven文档的权威答案。但是,即使我可以,我可能会回到这里并要求某人更好地解释文档:P所以,我问,maven用于查找它的依赖关系的命令/逻辑是什么?

3 个答案:

答案 0 :(得分:3)

就Maven而言,你的战争叠加产生的神器只会是另一件神器。

  

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

这将取决于您的设置文件中的快照updatePolicy。默认设置为每日。更多详情:http://maven.apache.org/settings.html#Repositories

  

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

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

  

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

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

  

我无法找到关于maven文档的权威答案。

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

答案 1 :(得分:1)

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

mvn -o clean install 

请参阅Maven Command Line Options以供参考(或只是执行mvn -h)。

答案 2 :(得分:0)

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