这就像我问的另一个问题一样,但不是依赖关系,而是关于模块。 让我给出一个场景。你有一个多module
项目和一个部署项目的持续集成服务器。这将部署到您本地settings.xml
拥有的存储库updatePolicy
中always
。现在假设您mvn compile
在 CI 部署项目后立即运行。
您最终会针对远程服务器modules
或本地模块进行编译吗?
换句话说,存储库的 对标签 updatePolicy
有任何影响吗?module
这就像我问的另一个问题一样,但不是依赖关系,而是关于模块。 让我给出一个场景。你有一个多module
项目和一个部署项目的持续集成服务器。这将部署到您本地settings.xml
拥有的存储库updatePolicy
中always
。现在假设您mvn compile
在 CI 部署项目后立即运行。
您最终会针对远程服务器modules
或本地模块进行编译吗?
换句话说,存储库的 对标签 updatePolicy
有任何影响吗?module
modules
标签是一个聚合。它的处理方式不一样dependencies
。dependency
请注意,您在和中指定的值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 install
child-a,child-b 也将能够编译。这意味着 child-a 甚至不在您的本地存储库中。这是可能的,因为 maven 将查看子类的目标文件夹。要确认这一点,您可以尝试运行mvn compile clean
(是的,编译后清理)。
同样,请注意,此行为仅在您从聚合器 pom 运行时适用。如果您当前的工作目录是 child-b(依赖于 child-a),它会在尝试查找 child-a 时遵守 updatePolicy。