3

这就像我问的另一个问题一样,但不是依赖关系,而是关于模块。 让我给出一个场景。你有一个多module项目和一个部署项目的持续集成服务器。这将部署到您本地settings.xml拥有的存储库updatePolicyalways。现在假设您mvn compile在 CI 部署项目后立即运行。

您最终会针对远程服务器modules或本地模块进行编译吗?

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

4

1 回答 1

3

modules标签是一个聚合。它的处理方式不一样dependenciesdependency请注意,您在和中指定的值module是不同的。当您声明 adependency时,您指定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 将查看子类的目标文件夹。要确认这一点,您可以尝试运行mvn compile clean(是的,编译后清理)。

同样,请注意,此行为仅在您从聚合器 pom 运行时适用。如果您当前的工作目录是 child-b(依赖于 child-a),它会在尝试查找 child-a 时遵守 updatePolicy。

于 2013-06-13T00:35:30.993 回答