我正在创建一个多模块项目,用于构建许多其他相关项目。其中一些项目也是多模块项目,在某些情况下,它们构建相同的子项目。 Maven对我大吼大叫,但这是故意的,我还是希望它能够建立。
有没有人解决这个问题? 感谢。
答案 0 :(得分:6)
当你有这样的结构时会发生这种情况:
+-- root-project-A
`-- pom.xml
+-- module-A
| `-- pom.xml
+-- module-B
| `-- pom.xml
+-- root-project-B
`-- pom.xml
+-- module-C
`-- pom.xml
并按照以下方式配置您的模块:
|-- root-project-A
`-- pom.xml
<modules>
<module>module-A</module>
<module>module-B</module>
<module>root-project-B</module> <!-- Error: project A reference project B -->
<module>root-project-B/module-C</module> <!-- Error: project A reference project B -->
</modules>
|-- root-project-B
`-- pom.xml
<modules>
<module>module-C</module>
</modules>
项目A不能引用项目B,因为B不引用A作为父项。包装必须是独立的
答案 1 :(得分:3)
我认为你不应该这样做。 (您可以尝试定义一个配置文件 - 假设一个完整的构建配置文件,您可以确保每个模块只编译一次,另一个配置文件在您进行子构建时添加其他模块。)
但你最好采用maven方式 - 每个项目都应该只包含来自其目录的模块目录,例如:只有直接的孩子。
Maven有一些非书面的隐式假设,例如 - 总是从父目录中的pom继承子模块,例如:继承树必须与您的目录树匹配,否则某些插件将无法工作,例如发布插件或一些报告插件。
简短的回答是 - 在maven中,你不能在项目层次结构/树中有两次模块。
maven中存在许多错误的方法,因此必须坚持已知的工作方式 - 例如pom层次结构==目录结构。
答案 2 :(得分:0)
您是否尝试过其中一个命令行选项?
-fae,--fail-at-end Only fail the build afterwards; allow all
non-impacted builds to continue
-fn,--fail-never NEVER fail the build, regardless of project
result
答案 3 :(得分:0)
听起来您可能从多个项目构建的“相同子项目”是所有这些项目的依赖项。在目录树中将其上移至较高级别,并在需要它的所有项目poms中将其声明为依赖项。它将由您构建的第一个需要它的项目来构建,其余项目将看到您已经“到那儿完成了”并跳过了它。
答案 4 :(得分:0)
对我来说<artifactId>
在pom中的2个不同模块是相同的,并且导致了此错误。
更改后,它就可以正常工作。