在 Java 开发中(尤其是使用 Maven/Gradle 等构建工具时),**组(Group)和工件(Artifact)**是两个核心概念,它们共同定义了依赖库的唯一标识。
一、组(Group)
- 定义:
Group
是一个逻辑上的组织标识符,通常表示项目的所有者或组织。它采用反向域名命名规则(如com.google
、org.apache
),避免命名冲突。 - 作用:
将相关的项目或模块归类到同一命名空间下,方便管理和查找。 - 示例:
org.springframework
:Spring 框架的组名com.fasterxml.jackson
:Jackson 库的组名
二、工件(Artifact)
- 定义:
Artifact
是项目的具体模块或产物的唯一名称,对应构建生成的二进制文件(如 JAR、WAR)。 - 作用:
标识项目中的具体模块或组件,例如核心库、插件或子模块。 - 示例:
spring-core
:Spring 框架的核心模块jackson-databind
:Jackson 的数据绑定模块
三、组和工件的关系
-
共同构成唯一坐标
在 Maven/Gradle 中,Group
+Artifact
+Version
三者组成唯一坐标,用于精准定位依赖。例如:<!-- Maven 依赖示例 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.10</version> </dependency>
Group
:org.springframework
Artifact
:spring-core
Version
:5.3.10
-
层级关系
- Group 是更高层级的分类,类似“组织”或“公司”。
- Artifact 是具体的项目或模块,属于某个 Group 下的具体实现。
-
物理存储映射
在 Maven 仓库中,依赖的存储路径由 Group 和 Artifact 决定。例如:
org/springframework/spring-core/5.3.10/spring-core-5.3.10.jar
org/springframework
→ Group 对应的路径spring-core
→ Artifact 名称5.3.10
→ 版本号
四、实际应用场景
-
依赖管理
通过指定Group
和Artifact
,项目可以精确引入所需依赖,例如:// Gradle 依赖示例 implementation 'com.google.guava:guava:31.1-jre'
- Group:
com.google.guava
- Artifact:
guava
- Group:
-
多模块项目
大型项目通常拆分为多个子模块,每个子模块有自己的Artifact
,但共享父级Group
。例如:<!-- 父项目 --> <groupId>com.mycompany</groupId> <artifactId>parent-project</artifactId> <!-- 子模块 --> <artifactId>user-service</artifactId> <!-- Group 继承自父项目 -->
-
发布到仓库
将项目构建为 JAR/WAR 并发布到 Maven 仓库时,需配置Group
和Artifact
以标识其唯一性。
五、总结
概念 | 作用 | 示例 |
---|---|---|
Group | 定义组织或项目的命名空间 | org.apache , com.google |
Artifact | 标识具体的模块或产物 | commons-lang3 , gson |
关系:
Group
是逻辑上的分类,Artifact
是具体的实现。- 两者共同确保依赖的唯一性,是构建工具管理依赖的核心机制。