在Maven中,模块是否受到存储库updatePolicy的影响?
这就像我问的另一个问题,但不是依赖,而是关于模块。 让我给出一个场景。 您有一个多module
项目和一个部署项目的持续集成服务器。 这将部署到存储库,您的本地settings.xml
的updatePolicy
always
。 现在假设您在CI部署项目后立即运行mvn compile
。
您最终是否会针对远程服务器的modules
或本地模块进行编译?
换句话说,存储库的updatePolicy
是否对module
标签有任何影响?
modules
标签是一种聚合。 它不被视为dependencies
。 请注意,您在dependency
和module
指定的值是不同的。 声明dependency
,指定maven坐标 。 对于module
,您可以指定相对目录 。
您最终是否会针对远程服务器的模块或本地模块进行编译?
如果在聚合器模块中运行mvn compile
(不在子模块中!) 并且子模块依赖项是兄弟依赖项,则总是最终编译本地模块。 当您在聚合器模块中进行编译时,在编译子模块时的依赖关系查找将是特殊的。 它将仅从兄弟模块目标文件夹中查看。 我找不到相关的文档,但你可以尝试一下。
想象一下,你有这些聚合器pom
... child-a child-b ....
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。