0

假设我有一个父项目(仅限 pom)和几个模块。知道 groupId 可以从其父级继承,但我还想将父级 artifactId 添加到模块的 groupId 端,您如何不在模块 poms 中重复相同的 groupId。

例如在父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,因为将模块保留在父级之下更有意义,而不是将它们并排放置。

谢谢你。

4

3 回答 3

2

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

现在,您已经可以省略groupIdif 它与父级相同。

也许你可以改变从打电话给你的父母com.proj:xyzcom.proj.xyz:parent解决他的问题。

于 2013-09-27T03:44:48.717 回答
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-element 添加到 pom.xml。maven 也抱怨不groupId应该包含表达式,而是一个常量。

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

于 2013-09-27T04:11:22.697 回答
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>

你的 abc 父母:

<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>
    <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 是具有不同模块结构的指标。

于 2013-09-27T10:33:19.513 回答