带你深度解析Maven
一、What`s Maven?
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说就是用来管理项目所需要的依赖且管理项目构建的工具。
1. 约定优于配置
2. 简单
3. 测试支持
4. 构建简单
5. CI集成
6. 插件丰富
1. 在官网下载安装包:http://maven.apache.org/download.cgi
2. 解压缩压缩包
3. 配置环境变量MAVEN_HOME=maven的解压后的目录
4. 在变量Path的开头增加"%MAVEN_HOME%\bin;"
5. 在MAVEN_HOME/conf/setting.xml文件中通过<localRepository></localRepository>标签配置本地仓库的位置
注 :超级pom.xml的位置:MAVEN_HOME/lib/maven-model-build-3.3.9.jar/org/apache/maven/model/pom-4.0.0.xml
1. 输出本地安装的maven的相关信息
mvn -version
2. 在IDEA中配置使用本地安装的maven
打开: File-->Settings, 然后按照下图操作
3. 控制台使用maven命令,配置文件加载顺序
1) ~/.m2/setting.xml
2) MAVEN_HOME/conf/setting.xml
<mirrors> <mirror> <id>aliyun_cental</id> <name>aliyun_cental</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>uk</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://uk.maven.org/maven2</url> </mirror> <mirror> <id>osc</id> <name>Human Readable Name for this Mirror</name> <url>http://maven.oschina.net:/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>osc_thirdparty</id> <mirrorOf>thirdparty</mirrorOf> <url>http://maven.oschina.net/content/repositories/thirdparty/</url> </mirror> </mirrors>
具体请移步另一篇博客:只用一招,让你Maven依赖下载速度快如闪电
1. maven项目结构
src/main/java : 项目java类文件位置
src/main/resources : 项目配置资源文件位置
src/test/java : 项目单元测试java类文件位置
src/test/resources : 项目单元测试配置资源文件位置
target : 项目打包后文件所在位置
2. setting.xml元素解读: https://www.cnblogs.com/yangxia-test/p/4409736.html
3. pom.xml元素解读:
1. 坐标:maven通过groupId、artifactId、version三个变量来唯一确定一个具体的依赖(俗称GAV)
2. 依赖:在pom.xml中我们通过dependency来声明坐标信息(GAV)如:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency>
这样我们就在项目中依赖了4.2.6.RELEASE版本的spring-core jar包.
注 :pom.xml中packaging用来指定打包方式,默认为:jar
3. dependencyManagementy
1) 只能出现在父pom里
2) 统一版本号
3) 只是依赖声明,并不直接依赖,需要时在子项目中在声明要使用依赖的GA信息,V信息可以省略.
4. 依赖scope
1) compile:编译依赖范围,在编译,测试,运行时都需要,依赖范围默认值
2) test:测试依赖范围,测试时需要。编译和运行不需要,如junit
3) provided:已提供依赖范围,编译和测试时需要。运行时不需要,如servlet-api
4) runtime:运行时依赖范围,测试和运行时需要。编译不需要,例如面向接口编程,JDBC驱动实现jar
5) system:系统依赖范围。本地依赖,不在maven中央仓库,结合systemPath标签使用
5. 依赖传递时仲裁原则
1) 路径最短原则
2) 路径一样长,加载先后原则
<dependency> <groupId>com.xxx</groupId> <artifactId>xxx</artifactId> <version>x.version</version> <exclusions> <exclusion> <groupId>com.xxx</groupId> <artifactId>yyy</artifactId> </exclusion> </exclusions> </dependency>
7. 依赖关系查看
进入工程根目录,在cmd中运行
1)
2)
八、版本管理
尽量使用语义化版本,方便团队协作,后面我们专门写一篇文章来说语义化版本。
Maven中的版本号中带SNAPSHOT和不带的区别以及作用请移步:Maven版本号中隐藏的惊天大秘密
九、生命周期、插件
1. 生命周期
A build phases is made up of plugin goals.
default(compile、package、install、deploy ...)
3) site(又包括:pre-site、site、post-site、site-deploy)
2. 插件
请移步另一篇文章:
十、自定义手写Maven的项目骨架
请移步另外一篇文章:手写Maven的archetype项目脚手架
十一、总结
通过本文,我们就对maven有了一个直观深入的了解和学习,通过maven我们可以进行自己的定制和开发。这是工程化的第一步,我们继续加油,下一步解析Git和Jenkins.
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的将是我最大的写作动力!另外您也可以选择【关注我】,可以很方便找到我!
本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/hafiz 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!