【问题标题】:Is there a way to put common stuff of multiple child poms into one single place?有没有办法将多个子 pom 的常用东西放在一个地方?
【发布时间】:2014-02-24 04:31:38
【问题描述】:

假设我有一些子 pom,它们有 90% 的共同点。我想把他们的共同代码放到一个共同的地方。我不能使用共同的父母,因为这些孩子也需要从他们自己的父母那里延伸出来。是否有其他地方可以放置常见的东西,定义一次,然后让子 pom 共享,而不是在每个子 pom 中多次复制常见的东西?或者如果您有其他意见,请根据您的喜好提出建议。谢谢

例如 项目 A 有 pom

<groupId>project-a</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>

<groupId>project-a</groupId>
<artifactId>parent</artifactId>
<version>2.0</version>

由一个完全不同的团队实施的项目 B 有这个父 pom

<groupId>project-b</groupId>
<artifactId>parent</artifactId>
<version>0.1</version>
<modules>
    <module>child-extends-from-project-a-version-1.0</module>
    <module>child-extends-from-project-a-version-2.0</module>
</modules>

以及从项目 A 扩展而来的一些子项目

<parent>
    <groupId>project-a</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version>
</parent>
<groupId>project-b.child</groupId>
<artifactId>child-extends-from-project-a-version-1.0</artifactId>
"some common stuff"

<parent>
    <groupId>project-a</groupId>
    <artifactId>parent</artifactId>
    <version>2.0</version>
</parent>
<groupId>project-b.child</groupId>
<artifactId>child-extends-from-project-a-version-2.0</artifactId>
"some common stuff"

我如何将这些“常见的东西”分组到一个地方而不在每个子 pom 中重复?

【问题讨论】:

  • 你说的是哪种common stuff?你能举个例子说明你喜欢搬进父母吗?
  • @khmarbaise 常见的东西,如依赖项、插件、配置文件、属性。
  • 您的子项目是否相关?它们会在一个反应​​器中一起构建,还是完全不相关并且只是共享共同的内容?
  • @blackbuild 孩子们一起构建并在一个 jar 中发布以供另一个团队使用,在那里他们将作为 v1 API 和 v2 API 等导入。

标签: maven project project-management pom.xml


【解决方案1】:

(我删除了我的旧答案,因为我看错了你的问题,对不起)

有办法,但是有点麻烦。由于长期计划的 Maven 片段尚未实现,您可以使用 tiles-maven-plugin:

https://github.com/maoo/maven-tiles

Tiles 插件允许您将外国 pom “导入”到您的模型中。所以你会为你的“常见的东西”创建一个单独的 pom:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>common</groupId>
  <artifactId>common-stuff</artifactId>
  <packaging>pom</packaging>
  <version>1.0</version>
  <name>"Common Stuff"</name>

  "Common stuff"

</project>

在您的实际子 POM 中,您将磁贴插件作为扩展名包含在内(可能在您真正的父 pom 中):

<build>
  <plugins>
    <plugin>
      <groupId>it.session.maven.plugins</groupId>
      <artifactId>tiles-maven-plugin</artifactId>
      <version>${maventiles.plugin.version}</version>
      <extensions>true</extensions>
    </plugin>
  </plugins>
</build>

现在您可以使用属性导入您的常用内容(我对为此使用属性不太满意,但它确实有效):

  <properties>
    <tile.1>common:common-stuff:1.0</tile.1>
  </properties>

因此,您的有效 POM 包含来自您的子项目本身的元素以及来自导入的常用工件的元素。

该插件有些专有,但对于正常用例,它运行良好。

【讨论】:

  • 谢谢!当然,一些 3rd 方插件可以做一些很棒的事情。太可惜了,官方太缺了。
猜你喜欢
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多