Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。
依赖管理
- Maven的第一个作用就是解决依赖管理。当我们声明了
abc
的依赖时,Maven自动把abc
和xyz
都加入了我们的项目依赖,不需要我们自己去研究abc
是否需要依赖xyz
。 依赖关系 | scope | 说明 | 示例 | | :—- | :—- | :—- | | compile | 编译时需要用到该jar包(默认) | commons-logging | | test | 编译Test时需要用到该jar包 | junit | | runtime | 编译时不需要,但运行时需要用到 | mysql | | provided | 编译时需要用到,但运行时由JDK或某个服务器提供 | servlet-api |
Maven如何知道从何处下载所需的依赖?也就是相关的jar包?答案是Maven维护了一个中央仓库,所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。
- 唯一ID
对于某个依赖,Maven只需要3个变量即可唯一确定某个jar包:
- groupId:属于组织的名称,类似Java的包名;
- artifactId:该jar包自身的名称,类似Java的类名;
- version:该jar包的版本。
注:只有以-SNAPSHOT
结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。
- Maven镜像
中国区用户可以使用阿里云提供的Maven镜像仓库。使用Maven镜像仓库需要一个配置,在用户主目录下进入.m2
目录,创建一个settings.xml
配置文件,内容如下:
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<mirrorOf>central</mirrorOf>
<!-- 国内推荐阿里云的Maven镜像 -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
</settings>
- 搜索第三方组件
通过search.maven.org搜索关键字,找到对应的组件后,直接复制即可
- 命令行编译
在命令中,进入到pom.xml
所在目录,输入以下命令:
$ mvn clean package
即可在target
目录下获得编译后自动打包的jar。
构建流程
- Maven通过lifecycle、phase和goal来提供标准的构建流程。
- lifecycle相当于Java的package,它包含一个或多个phase;phase相当于Java的class,它包含一个或多个goal;goal相当于class的method,它其实才是真正干活的。
大多数情况,我们只要指定phase,就默认执行这些phase默认绑定的goal,只有少数情况,我们可以直接指定运行一个goal,例如,启动Tomcat服务器:
mvn tomcat:run
在实际开发过程中,经常使用的命令有:
mvn clean
:清理所有生成的class和jar;mvn clean compile
:先清理,再执行到compile
;mvn clean test
:先清理,再执行到test
,因为执行test
前必须执行compile
,所以这里不必指定compile
;mvn clean package
:先清理,再执行到package
。
- 执行一个phase又会触发一个或多个goal:
| 执行的Phase | 对应执行的Goal |
| :—- | :—- |
| compile | compiler:compile |
| test | compiler:testCompile
surefire:test |