安装父POM而不构建子模块

136

我在一个Maven项目中有一个父POM,其结构如下:

             parent
               |
        ---------------
        |             |
      child1       child2

我想安装“父”POM到本地仓库,以允许child1获取我在dependencyManagement中所做的更改,但我不能进行常规的“clean install”,因为child2已经损坏并无法构建。

除了去父POM并注释掉"child2"模块之外,有没有适当的使用Maven的方法?

2个回答

232
使用mvn命令中的“-N”选项。
从“mvn -h”命令输出中可以看到:

-N,—non-recursive 不递归进入子项目


1
“-N”或“--non-recursive”选项表示不要递归到子项目中。 - Stéphane B.

42

尽管Guillaume是正确的,那是正确的选项,但我个人建议将父级保留为单独的模块。

我认为继承的最佳方法如下:

aggregator
|- module1/ (extends parent)
| |- pom.xml
|- module2/ (extends parent)
| |- pom.xml
|- parent/
| |- pom.xml
|- pom.xml

这样,您就可以始终只使用mvn clean install命令安装父级项目,无需添加额外选项。

您还可以将父级项目放在聚合器之外,以便在更多项目之间重复使用。

将父级项目和聚合器保持为两个单独的实体有很多好处。但最终,您可以根据项目/环境选择最佳方案。


1
我为此问题苦苦挣扎了数小时,发现一些项目都是这样做的,比如Apache Sling、JackRabbit和Artifactory。 - accuya
4
这是否被视为最佳实践?有关于这种方法的博客或其他资料吗? - Sled
1
@ArtB 你在此期间是否偶然发现了这样一篇文章? - Tomislav Nakic-Alfirevic
我在公司的许多旧项目中看到过这种方法。它很难处理,我强烈反对使用它。仅仅因为Maven允许“父级”不是POM告诉它要构建的内容,我们并不应该使用它。这使得概念上理解正在发生的事情变得更加困难。 - Captain Man
5
@MaximilianSchulz说:“没有完美的世界,正如人们所说的那样……这只是一种解决方法。” - carlspring
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接