modules标签是一个聚合。它与的处理方式不同
dependencies。请注意,您在
dependency和中指定的值
module是不同的。声明a时
dependency,请指定maven坐标。同时
module,您指定相对目录。
您最终将针对远程服务器的模块还是本地模块进行编译?
如果
mvn compile在聚合器模块中运行(在子模块中不能!) ,
并且子模块的依赖关系是同级的依赖关系,则最终将始终针对本地模块进行编译。当您
mvncompile在聚合器模块中时,在编译子模块时进行依赖项查找会很特殊。它看起来与同级模块的目标文件夹 只
。我找不到与此有关的文档,但是您可以尝试一下。
想象一下,您有这些聚合器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。



