ChatGPT解决这个技术问题 Extra ChatGPT

在不构建子模块的情况下安装父 POM

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

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

我想在本地 REPO 中安装“父”的 POM,以允许 child1 进行一些我在dependencyManagement 中所做的更改,但我无法进行常规的“全新安装”,因为“child2”已损坏并且不会构建。

这是使用 maven 执行此操作的正确方法(除了转到父 pom 并评论“child2”模块)。


S
Sled

在 mvn 命令中使用“-N”选项。

mvn -h

-N,--non-recursive 不递归到子项目中


'-N' 或 '--non-recursive' 选项意味着不递归到子项目中。
c
carlspring

虽然 Guillaume 确实是正确的并且这是正确的选择,但我个人建议将您的父母作为一个单独的模块。

我发现继承的最佳方法如下:

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

这样,您始终可以只安装父级,使用 mvn clean install 而无需额外选项。

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

将父级和聚合器保持为两个独立的事物有很多好处。但最终,您会选择最适合您的项目/环境的。


我在这个问题上苦苦挣扎了几个小时,发现有些项目就是这样做的,比如 apache sling、JackRabbit 和 Artifactory。
它将 maven 模块继承(依赖项、属性等)与批处理构建(子模块)隔离开来。
这被认为是最佳实践吗?关于这种方法的任何博客或其他内容?
@ArtB 你有没有偶然发现这样一篇文章?
@MaximilianSchulz:正如他们所说,没有完美的世界......这只是一种选择。