有没有办法将多个儿童poms的常见东西放在一个单独的地方?

时间:2014-02-24 04:31:39

标签: maven project project-management pom.xml

说我有一些儿童poms,它们有90%的共同点。我想把他们的公共代码放在一个共同的地方。我不能使用普通的父母,因为这些孩子的poms也需要从他们自己的父母那里延伸出来。还有其他地方我可以把常见的东西,定义一次,让孩子poms分享,而不是在每个孩子pom多次复制常见的东西?或者如果您有其他意见,请随意建议。谢谢

e.g。 项目A有poms

<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中重复?

1 个答案:

答案 0 :(得分:1)

(我删除了我的旧答案,因为我误解了你的问题,抱歉)

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

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

Tiles插件允许您将外国poms“导入”您的模型。因此,您将为“常见的东西”创建一个单独的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中,您将tiles插件作为扩展名(可能在您的真正父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包含子项目本身以及导入的公共事物工件中的元素。

该插件有点专有,但对于正常使用的情况,它可以很好地退出。