我想创建一个 groupId 为
com.company.maven
的 Maven 父 POM 文件,这为其子级提供了默认的 groupId com.company
。这可能吗?如果是这样,我怎样才能做到这一点?
只需创建父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 的想法没有意义。
我认为这是不可能的。此外,它违背了 Maven 命名约定指南,该指南建议(如果有的话)子模块应附加到父 groupId,而不是相反。
就像 java 类不知道“它的”子类一样,父 pom 也不知道它的子 pom。因此父 pom 将无法设置或覆盖其子项的属性。
与公认的答案相矛盾实际上有可能,父 POM 与子 POM 具有不同的
groupId
。这是 Maven 中的一个有用功能,它允许使用集中管理的配置(例如依赖项、插件和其他常见设置)构建分层项目结构,同时允许各个模块或项目维护自己的groupId
。
这里有一个简单的例子来说明如何使用不同的
groupId
来配置父 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.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>
groupId
可以不同,这有助于组织大型项目,其中不同的团队或子项目可能使用不同的命名约定或存储库结构。dependencyManagement
部分中定义的其他特定设置。这种配置灵活性使得 Maven 能够有效地应用于多样化和复杂的项目环境。