【问题标题】:"Child-only configuration" in parent POM / NOOP Parent POM父 POM / NOOP 父 POM 中的“仅子配置”
【发布时间】:2013-12-23 06:13:30
【问题描述】:

我有一个项目正在生成代码。这一代需要很长时间,所以我把它分成多个项目,每个项目占整体的 20%。原来的 POM 变成了“父 POM”,子 POM 依赖它,只包含一个单独的工件 ID,以及一两个更改的属性。

不想“构建父级”,以便将其委托给子级,因为这需要很长时间。我只想单独构建孩子。所以我在父级中没有“模块”部分。

现在这可行,除了一件事:Maven 将子 POM 放入存储库中,它们依赖于父级。但实际上父级本身不存在。父级永远不会被执行并且不会产生任何工件。我什至无法执行父级,因为它由于“丢失文件”等而失败。构建部分中的插件配置真的只为孩子们没有什么可做的来构建父级,因为它并不真正作为工件存在。

我可以删除子工件对(不存在的)父工件的依赖吗? 或者 当构建父级本身时,以某种方式将整个父级 POM(构建/插件、构建/资源和构建/插件管理)标记为“忽略”? (希望在本地 repo 中只为父级生成一个 POM)

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

我还看到了从“模板”生成 POM(消除依赖关系)的示例,但这对我也没有用,因为当 父模板 更改。

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

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

【问题讨论】:

  • 我发现我可以通过暂时“清空”父 POM 来“解决”它,因此它“构建”,并将其安装在 Maven 存储库中,但这真的很丑陋破解。

标签: java maven


【解决方案1】:

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

如果您有与此不同的情况,请尝试此方法并查看它是否有效,然后请报告问题以进行进一步分析。

【讨论】:

  • 今天尝试太晚了,但我仍然有一个问题:我读到 pluginManagement 只影响孩子如果他们自己明确声明使用插件(换句话说,父级中的 pluginManagement 配置不会在子级中“移动到构建/插件”)。假设这是正确的,我仍然必须在子级的构建部分中声明父插件(我没有在 atm 做)。我说的对吗?
  • 我的做法略有不同,但确实有效。我发现将依赖项直接放在父项中不会导致问题,因此我没有将它们放入dependencyManagement,因为这也需要我在子项中复制它们。我将父 POM“下一个”移动到子级,而不是它们的“顶部”,因此资源目录在父级中也有效(相同的目录深度)。他们似乎也不再引起问题了。我本来希望有一个选项,即在子项中根本没有提到插件,但仅 artifactId 就“足够小”。
猜你喜欢
  • 2018-03-05
  • 2018-08-09
  • 2012-02-03
  • 2016-01-19
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2020-07-12
相关资源
最近更新 更多