为父POM指定与子POM不同的groupId

问题描述 投票:0回答:4

我想创建一个 groupId 为

com.company.maven
的 Maven 父 POM 文件,这为其子级提供了默认的 groupId
com.company
。这可能吗?如果是这样,我怎样才能做到这一点?

java maven-2
4个回答
2
投票

只需创建父pom,例如:

<project...>

  <groupId>com.company.maven</groupId>
  <artifactId>parent</artifactId>
  <version>..</version>
...
</project>

并在子pom中定义:

<project...>
  <parent>
    <groupId>com.company.maven</groupId>
    <artifactId>parent</artifactId>
    <version>..</version>
  </parent>

  <groupId>com.company</groupId>

</project>

换句话说,可以这样做,但我不会这样做,因为我会将父级命名为“com.company”,而子级命名为“com.company.maven”。我会将 groupId 与代表文件夹的 java 包名称进行比较,因此您设置 groupId 的想法没有意义。


0
投票

我认为这是不可能的。此外,它违背了 Maven 命名约定指南,该指南建议(如果有的话)子模块应附加到父 groupId,而不是相反。


0
投票

就像 java 类不知道“它的”子类一样,父 pom 也不知道它的子 pom。因此父 pom 将无法设置或覆盖其子项的属性。


0
投票

与公认的答案相矛盾实际上有可能,父 POM 与子 POM 具有不同的

groupId
。这是 Maven 中的一个有用功能,它允许使用集中管理的配置(例如依赖项、插件和其他常见设置)构建分层项目结构,同时允许各个模块或项目维护自己的
groupId

Maven 中父子配置示例

这里有一个简单的例子来说明如何使用不同的

groupId
来配置父 POM 和子 POM:

父 POM(父项的
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.parent</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

子 POM(子模块的
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.example.parent</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example.child</groupId>
    <artifactId>child-module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

要点

  • Group ID:父 POM 和子 POM 的
    groupId
    可以不同,这有助于组织大型项目,其中不同的团队或子项目可能使用不同的命名约定或存储库结构。
  • 继承:子 POM 继承父 POM 的设置,包括依赖项、插件配置以及
    dependencyManagement
    部分中定义的其他特定设置。
  • 重写:子 POM 可以重写某些继承(例如依赖项和插件)以满足特定要求。

这种配置灵活性使得 Maven 能够有效地应用于多样化和复杂的项目环境。

© www.soinside.com 2019 - 2024. All rights reserved.