问题描述
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 install
child-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
标签有没有影响?