将同一父pom下的公共groupId模块移动到Maven中的单个位置

时间:2013-09-27 01:58:17

标签: java maven pom.xml

说我有一个父项目(仅限pom)和几个模块。你怎么不重复模块poms中的同一groupId知道groupId可以从他们的父继承,但我也想将父artifactId添加到模块的groupId端。

e.g。在父母pom里面,我有

<groupId>my.proj</groupId>
<artifactId>xyz</artifactId>
<version>1</version>

然后在每个模块中,我现在需要写

<parent>
    <groupId>my.proj</groupId>
    <artifactId>xyz</artifactId>
    <version>1</version>
</parent>
<groupId>my.proj.xyz</groupId>
<artifactId>mod-a</artifactId>

每个模块。但我想要的是摆脱常见的groupId(最好是父母也可以删除,但我知道这在当前的Maven中是不可能的),只需写一下

<parent>
    <groupId>my.proj</groupId>
    <artifactId>xyz</artifactId>
    <version>1</version>
</parent>
<artifactId>mod-a</artifactId>

自动接收my.proj.xyz的groupId而不仅仅是my.proj,因为更有意义的是保持父级下的模块不要将它们并排放置。

谢谢。

3 个答案:

答案 0 :(得分:2)

不建议参数化groupId。此外,这不是你要求的,因为你只是不想完全列出该条目。这需要改变Maven的工作方式,而且我个人觉得你不太可能按照自己的方式行事,因为影响太大了。

现在,如果它与父母一样,你可以省略groupId

也许您可以从致电父母com.proj:xyz更改为com.proj.xyz:parent来解决问题。

答案 1 :(得分:1)

显然,您无法从父级继承该组并同时更改它。您可以将父groupIdartifactId用作模块groupId

中的属性
<parent>
    <groupId>my.proj</groupId>
    <artifactId>xyz</artifactId>
    <version>1</version>
</parent>
<groupId>${project.parent.groupId}.${project.parent.artifactId}</groupId>
<artifactId>mod-a</artifactId>

但您仍需要将groupId - 元素添加到pom.xml。 maven也抱怨groupId不应该包含表达式而是常量。

我建议命名父my.proj.xyz:xyz-parent,以便模块可以直接继承父groupId

答案 2 :(得分:0)

根据您所写的内容,您的结构如下所示:

   +-- groupId: my.proj artifactId: xyz
        +--- groupId: my.proj.abc artifactId: mod-a
        +--- groupId: my.proj.abc artifactId: mod-b
        +--- groupId: my.proj.abc artifactId: mod-c
        +--- groupId: my.proj.xyz artifactId: mod-a
        +--- groupId: my.proj.xyz artifactId: mod-b
        +--- groupId: my.proj.xyz artifactId: mod-c

这是将结构更改为以下内容的指标:

   +-- groupId: my.proj artifactId: xyz
        +--- groupId: my.proj.abc artifactId:abc-parent
        !    +--- groupId: my.proj.abc artifactId: mod-a
        !    +--- groupId: my.proj.abc artifactId: mod-b
        !    +--- groupId: my.proj.abc artifactId: mod-c
        !
        +--- groupId: my.proj.xyz artifactId:xyz-parent
             +--- groupId: my.proj.xyz artifactId: mod-a
             +--- groupId: my.proj.xyz artifactId: mod-b
             +--- groupId: my.proj.xyz artifactId: mod-c

这将导致poms看起来像这样:

父pom.xml:

<groupId>my.proj</groupId>
<artifactId>xyz</artifactId>
<version>1-SNAPSHOT</version>

<modules>
  <module>abc-parent</module>
  <module>xyz-parent</module>
</modules>

你的父母:

<parent>
    <groupId>my.proj</groupId>
    <artifactId>xyz</artifactId>
    <version>1-SNAPSHOT</version>
</parent>

<groupId>my.proj.abc</groupId>
<artifactId>abc-root</artifactId>

你的abc-mod-a:

<parent>
    <groupId>my.proj.abc</groupId>
    <artifactId>abc-root</artifactId>
    <version>1-SNAPSHOT</version>
</parent>

<artifactId>mod-a</artifactId>

你的xyz-parent:

<parent>
    <groupId>my.proj</groupId>
    <artifactId>xyz</artifactId>
    <version>1-SNAPSHOT</version>
</parent>

<groupId>my.proj.xyz</groupId>
<artifactId>xyz-root</artifactId>

你的xyz-mod-a:

<parent>
    <groupId>my.proj.xyz</groupId>
    <artifactId>xyz-root</artifactId>
    <version>1-SNAPSHOT</version>
</parent>

<artifactId>mod-a</artifactId>

通常,更改每个模块中的groupId是具有不同模块结构的指标。