什么是Maven
Maven是一个自动化构建工具,最开始只适用于Java项目,后来逐渐支持C#,Ruby等项目的构建。Maven使用XML格式文件来描述一个项目的依赖,被称为Project Object Model(POM)。一个pom.xml描述了一个项目所有的配置,包括项目信息,项目所依赖的包等等。
Maven可以从一个或者多个代码仓库里(Maven 2 Central Repository)动态下载Java库文件以及插件,并将其保存到本地的仓库里(缓存),从而实现依赖的更新。
通常,一个Maven项目的代码结构如下:
接下里主要介绍下Maven项目构建工具两个关键的概念:编译的生命周期与POM。
编译周期
Maven提供了3种内置的编译周期:default(默认),clean(清除),site(位置)。默认周期用于项目的部署,clean周期则用于项目的清除工作,site周期主要处理项目相关的文档。
这里简要的列出default周期所包括的各个阶段以及具体作用:
阶段 | 任务 | maven命令 |
---|---|---|
validate | 验证项目配置是否正确以及必要的信息是否可用 | – |
generate-sources | 产生用于编译的源代码 | – |
compile | 编译项目源代码 | – |
test | 用合适的测试框架测试代码,不应该需要代码打包或者部署 | – |
package | 以可分发的格式打包编译好的代码,比如JAR | – |
verify | 确认集合测试结果以确保质量达标 | – |
install | 安装包到本地库,用于其他项目的依赖 | mvn install |
deploy | 部署,将软件包拷贝到远程仓库,分享给其他开发者 | – |
关于项目编译各个生命周期更详细的文档,请参考:
Maven编译周期: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
POM
什么是POM? POM,英文全称为Project Object Model,即项目对象模型,是Maven中最基本的组成部分(每个Maven项目都必须的一个文件)。POM是一个XML的文档,里边包含了Maven编译所需的项目信息及其配置。创建时,POM里边就包含了对大多数项目适用的默认值,比如编译目录’target’;源码目录’src/main/java’;测试代码目录,’src/test/java’。
POM文件主要包含了以下几个方面的信息:
- 项目依赖;
- 开发者与贡献者列表;
- 插件列表;
- 插件配置;
- 资源列表
一个最小的POM配置需要包括以下几项:
- 项目根目录‘
’标签 - modelVersion,应该被设为4.0.0
- groudId,项目所在组的ID
- artifactId,项目ID
- version, 给定的组下项目的版本号
例如下面就是一个最小的POM文件:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>
稍微复杂一点,添加一个项目的依赖,如下这样一个pom.xml文件:
<project>
<!-- model version is always 4.0.0 for Maven 2.x POMs -->
<modelVersion>4.0.0</modelVersion>
<!-- project coordinates, i.e. a group of values which
uniquely identify this project -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<!-- library dependencies -->
<dependencies>
<dependency>
<!-- coordinates of the required library -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- this dependency is only used for running and compiling tests -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
更多关于POM的信息请参考官方文档:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html