Maven学习笔记之坐标

作为依赖管理工具,Maven定义了坐标用于唯一标识构件在仓库中的位置,构成了依赖管理的底层基础。
Maven构件的坐标包括:
  • groupId定义隶属实际项目的名称,一般是隶属组织或公司域名的倒序加上实际项目名称;
  • artifactId定义模块的名称,一般是实际项目名称加上子模块名称。一个模块可能包含多个子模块,便于模块化管理;
  • version定义模块的版本,主要包括稳定版本和SNAPSHOT版本;
  • packaging定义模块的打包方式,常用的打包方式包括:
    - jar是普通模块的打包方式,即不在POM文件中显式指定packaging元素时默认的打包方式,生成构件的后缀名为.jar;
    - maven-plugin是Maven插件项目的打包方式,生成构件的后缀名为.jar;
    - pom是父模块的打包方式,负责组织子模块,只生成目录结构,不生成构件;
    - war是Web项目的打包方式,构建成功后可以直接放入Tomcat等Web容器运行,生成构件的后缀名为.war;
    可见项目的打包方式和生成构件的后缀名虽然有一定的联系,但不是一一对应关系。
  • classifier定义项目的附属构件,包括同时发布的JavaDoc、源代码等,不能在POM文件中显式指定,只能由指定的Maven插件帮助生成,如Maven JavaDoc Plugin、Maven Sources Plugin等。
其中groupId、artifactId和version必须指定,最终构件的文件名形如artifactId-version[-classifier].packaging。

实例
获取Spring Security 3.2.5版本,打开对应的POM文件可以看到如下定义:
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.5.RELEASE</version>
根据坐标的知识可以得出:
  • 组织的域名是springframework.org,实际项目名称是security;
  • 模块的名称是spring-security-web;
  • 模块的版本是3.2.5.RELEASE,是稳定的发布版本;
  • 模块使用默认的打包方式,不包含子模块,生成构件的后缀名为.jar;
  • 最终构件的文件名为spring-security-web-3.2.5.RELEASE.jar。
结合文件系统的目录结构,构件在仓库中位于org/springframework/security/spring-security-web/3.2.5.RELEASE/spring-security-web-3.2.5.RELEASE.jar。

问答

1. 为什么要在groupId末尾加上实际项目名称?假设一个公司的多个Maven项目都包含子模块:

A项目
<groupId>org.company</groupId>
<artifactId>projectA</artifactId>
A项目子模块1
<groupId>org.company</groupId>
<artifactId>projectA-module1</artifactId>
A项目子模块2
<groupId>org.company</groupId>
<artifactId>projectA-module2</artifactId>
B项目
<groupId>org.company</groupId>
<artifactId>projectB</artifactId>
B项目子模块
<groupId>org.company</groupId>
<artifactId>projectB-module</artifactId>
如果不在groupId末尾加上实际项目名称,那么两个项目的构件在仓库中都位于org/company目录下,子模块将难以区分。

2. 为什么要在artifactId前面加上实际项目名称?假设在Maven项目声明了多个依赖:

A项目
<groupId>org.company.projectA</groupId>
<artifactId>core</artifactId>
<version>1.0.0</version>
B项目
<groupId>org.company.projectB</groupId>
<artifactId>core</artifactId>
<version>1.0.0</version>
如果不在artifactId前面加上实际项目名称,那么两个构件在Maven Dependency都显示为core-1.0.0.jar,构件将难以区分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值