在Maven中,模块是否受存储库的updatePolicy影响?

问题描述

modules标签一个聚合。它与的处理方式不同dependencies。请注意,您在dependency和中指定的值module是不同的。声明a时dependency,请指定maven坐标。同时module,您指定相对目录

您最终将针对远程服务器的模块还是本地模块进行编译?

mvn compile在聚合器模块中运行(在子模块中不能!) 并且子模块的依赖关系是同级的依赖关系,则最终将始终针对本地模块进行编译。当您mvn compile在聚合器模块中时,在编译子模块时进行依赖项查找会很特殊。它看起来与同级模块的目标文件夹 。我找不到与此有关的文档,但是您可以尝试一下。

想象一下,您有这些聚合器pom

...
<modules>
  <module>child-a</module>
  <module>child-b</module>
</modules>
....

child-b pom声明依赖于child-a。(确保您有一个真实的输出类)

接下来,当您mvn compile使用聚合器pom时,即使您以前没有mvn installchild-a ,child- b也将能够编译。这意味着child-a甚至不在您的本地存储库中。这是可能的,因为maven将查找child- a的类的目标文件夹。要确认这一点,您可以尝试运行mvn compile clean(是的,在编译后清除)。

再次注意,此行为仅在从聚合器pom运行时才适用。如果您当前的工作目录是child-b(取决于child-a),则它在尝试查找child-a时将遵守updatePolicy。

解决方法

让我给出一个方案。您有一个多module项目和一个用于部署项目的持续集成服务器。这将部署到本地settings.xml具有的updatePolicy的存储库always。现在,假设您mvn compile在CI部署项目后立即运行。

您最终将针对远程服务器的modules还是本地模块进行编译?

换句话说,updatePolicy存储库的对module标签有没有影响?