POM(Project Object Model),工程对象模型,是一个XML文件,放在工程根目录下,命名为
pom.xml ,其中包含了关于工程、各种配置细节的信息,Maven使用这些信息构建工程。
最小POM
一个最小的POM包含如下元素,
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>
project ,POM文件的顶级元素modelVersion ,必须设置为4.0.0 ,除非Maven开发者升级了模板,否则这个值永远是4.0.0 。groupId ,项目创建团体或组织的唯一标识,通常是域名倒着写。artifactId ,项目的唯一标识,通常是项目名称。version ,项目版本,可能是发布版本(RELEASE版本)或者开发版本(SNAPSHOT版本)
Maven坐标
groupId ,工程组标识artifactId ,工程标识version ,工程版本
坐标是jar包的唯一标识。 groupId 和artifactId 定义了artifact在仓库中的位置。
Maven常用命令
mvn -v ,查看maven版本,也用来检查maven是否安装成功mvn compile ,编译,将Java源码编译为class文件mvn test ,执行test目录下的测试用例mvn package ,打包,把Java工程打包为jar包mvn test ,清理环境,清理target文件mvn install ,安装,把当前项目安装到maven的本地仓库中
传递依赖与排除依赖
- 传递依赖
如果我们的项目依赖了一个jar包,而该jar包又引用了其他jar包,那么,在默认情况下,项目编译时,Maven会将直接引用和间接引用的jar包都下载到本地。 - 排除依赖
如果我们只想下载直接引用的jar包,那么需要在pom.xml 中做如下配置,即给出需要排除的坐标,这里就要用到<exclusions> 和<exclusion> 元素,如,
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.94.17</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖冲突
如果项目中多个jar同时引用了相同的jar,会产生依赖冲突,但Maven采用了两种避免冲突的策略,所以Maven中不存在依赖冲突。
- 第一种策略,短路优先
比如, 本项目->A.jar->B.jar->X.jar, 本项目->C.jar->X.jar, 短路优先的策略下,Maven最终会选择 C.jar中引用的X.jar。 - 第二种策略,声明优先
如果引用路径长度相同,则采用声明优先策略,即在pom.xml 中,谁的声明在前,就使用谁的。
- 新建目录,并在该新目录下执行命令:
mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 。 mvn compile ,生成target目录。
|