码迷,mamicode.com
首页 > 其他好文 > 详细

Maven学习笔记之坐标

时间:2015-02-16 16:59:50      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:java   maven   coordinate   

作为依赖管理工具,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,构件将难以区分。

Maven学习笔记之坐标

标签:java   maven   coordinate   

原文地址:http://blog.csdn.net/magnificent_tony/article/details/43852451

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!