我有一个多模块Maven项目,它有一个父项目P和三个子模块a、B和C。B和C都是战争项目,都依赖于a。
我可以在P中键入mvn compile,并正确编译所有子模块。当我想对特定模块进行操作时,问题就来了。
我希望能够为项目B打包一场战争,但是当我从B的目录运行package命令时,它抱怨无法找到a的依赖项。
我从这个问题中了解到:Maven和依赖模块可能Maven并不是为这种类型的依赖解决而设计的,但这引出了如何打包B的问题?
当我真的只想要B时,我必须为整个项目层次结构运行mvn包吗?
每当我想要打包B时,我必须将A的快照安装到本地存储库中吗?
当A仍处于积极开发阶段时,第二种情况就不那么有趣了。
这里有什么最佳实践吗?
假设父pom.xml包含6个模块,您希望运行A、B和F。
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
<module>D</module>
<module>E</module>
<module>F</module>
</modules>
1- CD到父项目
mvn --projects A,B,F --also-make clean install
OR
mvn -pl A,B,F -am clean install
OR
mvn -pl A,B,F -amd clean install
注意:当您使用-am选项指定一个项目时,Maven将构建指定项目所依赖的所有项目(直接或间接)。Maven将检查项目列表并遍历依赖关系树,找到它需要构建的所有项目。
虽然-am命令在多模块构建中构建特定项目所需的所有项目,但-amd或——also-make-dependents选项配置Maven构建一个项目和依赖于该项目的任何项目。当使用——also-make-dependent时,Maven将检查反应堆中的所有项目,以找到依赖于特定项目的项目。它将自动构建这些项目,而不是其他任何项目。