Maven学习笔记之坐标

作为依赖管理工具,Maven定义了坐标用于唯一标识构件在仓库中的位置,构成了依赖管理的底层基础。Maven构件的坐标包括: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>根据坐标的知识可以得出:结合文件系统的目录结构,构件在仓库中位于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学习笔记之坐标

相关文章:

你感兴趣的文章:

标签云: