Maven经常使用的几个核心概念

在使用Maven的过程当中,常常会遇到几个核心的概念,准确的理解这些概念将会有莫大的帮助。spring

1. POM(Project Object Model)项目对象模型maven

POM 与 Java 代码实现了解耦,当须要升级版本时,只须要修改POM,而不须要更改Java代码,而在POM稳定后,平常的Java代码开发基本不涉及POM的修改。ide

 

2. 坐标post

groupId , artifactId , version 三个元素是项目的坐标,惟一的标识这个项目。测试

groupId 项目所在组,通常是组织或公司,artifactId 是当前项目在组中的惟一ID; version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定。spa

groupId 和实际项目不必定是一一对应的,maven 有模块的概念,例如 spring-core, spring-context...;groupId 也不该该只对应公司或组织名,建议具体到项目名,由于公司或者组织下有多个项目,而artifactId只能表明模块名。对象

 

3. 依赖blog

传递性依赖可能带来一些问题,例如两个依赖的版本不兼容,依赖SNAPSHOT可能会致使项目的不稳定问题,依赖的jar包因为版权问题没法使用等等问题,此时,就须要在dependency中用exclusion 排除依赖,而后引入合适的依赖,exclusion中只需提供groupId 和 artifactId 便可。继承

Maven解决依赖冲突的两个原则接口

1. 最短路径(高优先级)

2. 最早声明

几个scope的有效范围:

1. compile : 编译,测试,运行都有效,默认的选择

2. test : 测试有效,例如junit

3. provided : 编译,测试有效,例如 servlet ,运行时容器会提供实现

4. runtime : 运行和测试有效,例如 jdbc,编译时只需相应的接口,测试和运行时才须要具体的实现

5. system : 编译,测试有效。使用此范围的依赖必须经过systemPath元素显式的指定依赖文件,于是

 此类依赖是不经过Maven仓库解析的,通常适合于本机测试环境下,依赖本地起的服务

 6. import(2.0.9 以上):

4. 聚合与继承

聚合:仅仅是为了聚合其余模块,这样就不用每一个模块分别去执行MVN命令了,其自己并无实质性内容,注意其打包方式必须为pom

<moduls>

  <modul> m1</modul>

  <modul> m2</modul>

  <modul> m3</modul>

</moduls>

继承:

parent pom 用 <DependencyManagement> 声明依赖以提升灵活性,其中声明的依赖并不会实际引入实际的依赖,此时子pom继承后的<dependency>就能够只写groupId 和 artifactId ,其余细节 parent pom中已经声明过了。

聚合是为了快速的构建项目,而继承是为了不重复配置。但二者的打包方式都必须为pom

 

5. 快照

A 和 B 合做开发,B 开发的模块依赖A开发的模块,A 发布时version设为快照,例如 2.1-SNAPSHOT,再发布过程当中,maven会自动给此版本打上时间戳,B 依赖于此快照版本,当B构建项目时,Maven会自动根据时间戳检查最新版本,并更新。快照版本应该仅在组织内部的项目或者模块间使用;正式发布时,要记得改成正式版本

 

6. 生命周期

三套独立的生命周期(clean, default, site),每一个周期都包含一些阶段。

  clean的三个阶段:
1.pre-clean:执行一些清理前须要完成的工做
2.clean 清理上一次构建生成的文件
3. post-clean 执行一些清理后须要完成的工做
  default的一些关键阶段:
1. process-sources: 处理项目主资源文件,通常是将src/main/resources 目录的内容进行变量替换等工做后,复制到项目输出的主classpath目录中。
2. compile 编译项目的主源码
3. process-test-sources: 处理项目测试资源文件
4. test-compile 编译项目的测试代码
5. test 进行测试
6. package 接受编译好的代码,打包成可发布的格式,例如jar
7. install 将包安装到Maven本地仓库,供本地其余Maven项目使用
8. deploy 将最终的包复制到远程仓库
  site 生命周期
1. pre-site 2. site 3. post-site 4.site-deploy

相对应得几个经常使用命令 mvn clean; mvn test; mvn clean compile; mvn clean install

相关文章
相关标签/搜索