java - 父 POM/NOOP 父 POM 中的 "Child-only configuration"

标签 java maven

我有一个项目生成代码。生成时间真的很长,所以我把它分成了多个项目,每个项目产生了整体的 20%。原始 POM 成为“父 POM”,子项依赖于它,仅包含一个单独的 Artifact ID 和一两个更改的属性。

不想“构建父级”,以便它委托(delegate)给子级,因为这需要太长时间。我只想单独构建 child 。所以我在父级中没有“模块”部分。

现在这可行了,除了一件事:Maven 将子 POM 放入存储库中,它们依赖于父级。但是父对象本身实际上并不存在。 parent 永远不会被执行,也不会产生任何 Artifact 。我什至无法执行父级,因为它由于“丢失文件”等原因而失败。构建部分中的插件配置确实仅供 child 使用;构建父级无事可做,因为它并不真正作为 Artifact 存在。

我可以删除子 Artifact 对(不存在的)父 Artifact 的依赖吗? 或者 当构建父级本身时,以某种方式将整个父级 POM(build/plugins、build/resources 和 build/pluginManagement)标记为“忽略”? (希望在本地仓库中只为父级生成一个 POM)

我想要的是“无依赖重用”,但这似乎不可能(我不明白为什么;子 jar 显然不依赖于父 jar,只依赖于子 POM 取决于父 POM)。

我也看到过从"template"生成 POM 的例子(消除依赖),但这对我也没有用,因为当 父模板 更改。

也许这对我来说更有意义,如果我理解为什么 POM 依赖 硬连线以暗示 Maven 中的 Artifact 依赖

打个比方,当我 build 一个狗屋时,我“依赖”木头和锤子……来完成它。但是一旦狗窝建成,狗窝本身就不再依赖于锤子的使用了。

最佳答案

除了模块、dependencyManagement 和 build/pluginManagement 之外,父级中应该没有任何其他内容,并且您应该通过模块部分从父级引用子级(如果您想构建一个模块,请使用 -pl 和 -am(see here ). 你的 pluginManagement 部分应该包含所有具有通用配置、范围和版本的插件。你的 dependencyManagement 部分应该包含所有依赖项、范围和版本。你的子 poms 应该不包含版本,以及与父项不同的依赖项的范围,以及构建特定模块所需的插件。

如果你有与此不同的东西,那么试试这个,看看它是否有效,然后请报告问题以供进一步分析。

关于java - 父 POM/NOOP 父 POM 中的 "Child-only configuration",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734088/

相关文章:

java - 无法解析符号 HttpPost

java - 为什么我在尝试安装 Maven 时出现错误 Java is set to an invalid directory?

java - Maven 未运行 JUnit 5 测试

maven - Gradle 和 Maven 之间的区别?

java - Maven 错误 : package org. mockito 不存在

java - 删除开关条件的干净代码(使用多态性)

java - 流口水议程组锁定 Activity 似乎对我不起作用

linux - 没有找到 Eclipse 的 Maven 插件

java - Play 框架 webservice - 传递 base64 时激活器启动问题

java - PDFTextStripper 解析编码错误