一、maven的安装与配置
(1)设置环境变量 MAVEN_HOME 为你本机的maven安装目录,比如 F:\apache-maven-3.3.9-bin\apache-maven-3.3.9
(2)设置环境变量 path,在其最后添加 ;%MAVEN_HOME%\bin
在eclipse上配置maven:
(1)添加本地的maven路径
(2)添加全局的settings.xml文件,有需要还可以添加用户的settings.xml文件
(3)设置JDK的 VM arguments:
-Dmaven.multiModuleProjectDirectory=MAVEN_HOME
这样,就可以在eclipse中新建maven项目,以及在run as中执行各种maven命令了。
二、maven的生命周期
下文摘自官方,看原文解释相关概念更清楚无歧义
Maven Phases:
A phase is a step in the build lifecycle, which is an ordered sequence of phases. When a phase is given, Maven will execute every phase in the sequence up to and including the one defined.
default lifecycle phases:
- validate: validate the project is correct and all necessary information is available
- compile: compile the source code of the project
- test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
- package: take the compiled code and package it in its distributable format, such as a JAR.
- integration-test: process and deploy the package if necessary into an environment where integration tests can be run
- verify: run any checks to verify the package is valid and meets quality criteria
- install: install the package into the local repository, for use as a dependency in other projects locally
- deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
two other Maven lifecycles :
- clean: cleans up artifacts created by prior builds
- site: generates site documentation for this project
就是说在一个lifecycle中,给定任意一个phrase,maven都会从该lifecycle的最开始一直执行到给定的phrase。
还有两个额外独立的lifecycle,一个是clean,一个是site。这也是为什么我们经常像这样:mvn clean install,来输入这个命令,因为clean和install不在一个lifecycle中。
三、setting.xml
网上讲这个配置文件的文章数不胜数,就不再赘言了。附上一篇比较好的中文讲解:
Maven之(六)setting.xml配置文件详解
以及权威的官方文档:
Settings Reference
四、pom.xml
也是附上一中一英两个链接:
Maven之(七)pom.xml配置文件详解
POM Reference
五、maven的管理之道
个人的理解与感悟:maven体现了两个纬度的管理之道,一者是纵向的管理——也就是管理了项目从编译到发布的整个过程,也就是整个生命周期;另一者是横向的管理——管理了项目所需的依赖。
maven一个令人眼前一亮的概念就是将面向对象的思维运用到项目的管理和构建中。POM全称Project Object Model,就是将一个项目当作一个对象,将这个项目中的依赖当作这个对象的属性,而pom.xml就是描述这个对象的文件。
一个孤立的java对象只能完成有限的功能,一个复杂的系统是众多对象相互配合来实现的,并且对象之间有着不同的“配合”,如继承、依赖、聚合。就像java中的对象一样,一个复杂的项目也需要依赖众多其他的项目,并且项目之间的也可以有继承、依赖和聚合的关系。
5.1、依赖传递与依赖冲突
依赖传递:比如你自己的项目依赖了项目A,而项目A又依赖了项目B,则在你自己项目maven dependencies中会自动引用项目B。
依赖冲突:比如你自己的项目依赖了项目A和项目B,而项目A和B又都依赖项目C,所以根据依赖传递,将会引用两个项目C,此时两个项目C就会造成冲突。maven解决依赖冲突有两个策略:
(1)短路优先:两个项目C,谁的路径长度更短,就引用谁。
(2)先声明先有线:两个项目C,若它们的路径长度相同,则谁先声明,就引用谁
5.2、继承【Inheritance】
如同所有的JAVA类都继承自Object类一样,所有的POM也都继承自一个Super POM。除此之外,你也可以自己写一个POM,并把它当作你其他POM的父类。这样你所有继承于这个父类POM的子类POM都会引用父类POM中的所有依赖。
5.3、聚合【Aggregation (or Multi-Module)】
你可以将你的多个项目都放到一个POM中,这时对这一个POM执行mvn clean install就等同于对该POM的多个项目全部依次执行该命令。