目录
1. 生命周期
1.1 作用
为了让构建过程自动化完成,Maven设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作
Maven设定了三个生命周期,一个生命周期的每一环对应构建过程中的一个操作
- 不同的生命周期的执行是独立的,比如命令
mvn clean package
,执行Clean生命周期和Default生命周期 - 同一生命周期,执行后面的环节,会自动执行前面的环节。比如命令
mvn install
,会先按顺序执行Default生命周期install环节前面的所有环节(compile、package等),再最终执行install环节
1.2 三个生命周期
生命周期名称 | 作用 | 各个环节 |
---|---|---|
Clean | 清理操作相关 | pre-clean clean post-clean |
Site | 生成站点相关。站点是一组静态页面,是对项目进行简要说明的,比如项目介绍、开发人员、依赖信息 | pre-site site post-site deploy-site |
Default | 主要构建过程 | validate generate-sources process-sources generate-resources process-resources:复制并处理资源文件,至目标目录,准备打包 compile:编译项目main目录下的源代码 process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources:复制并处理资源文件,至目标测试目录 test-compile:编译测试源代码 process-test-classes test:使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署 prepare-package package:接受编译好的代码,打包成可发布的格式,如jar pre-integration-test integration-test post-integration-test verify install:将包安装至本地仓库,以让其它项目依赖 deploy:将最终的包复制到远程的仓库,以让其它开发人员共享;或者部署到服务器上运行(需借助插件,例如:cargo) |
2. 插件和目标
2.1 插件
Maven的核心程序仅仅负责宏观调度,不做具体工作。具体工作都是由Maven插件完成的。例如:编译就是由maven-compiler-plugin-3.10.1.jar插件来执行的
2.2 目标
一个插件可以对应多个目标,而每一个目标都和生命周期中的某一个环节对应
Default生命周期中有compile和test-compile两个和编译相关的环节,这两个环节对应compile和test-compile两个目标,而这两个目标都是由maven-compiler-plugin-3.10.1.jar 插件来执行的
3. 定义项目描述信息和生成site站点
3.1 项目描述信息介绍
Maven可以在pom.xml定义项目描述信息,包括:
- 公司或组织信息
- 项目许可证
- 开发成员信息
- SCM信息
- issue管理信息
可以将整个项目相关信息收集起来,生成HTML页面,组成一个可以直接访问的站点。即Maven的site生命周期
3.2 在pom.xml中定义项目描述信息
示例如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hh</groupId>
<artifactId>maven-learn</artifactId>
<version>0.1</version>
<name>my-project</name>
<description>my project test</description>
<url>https://www.my-project.com</url>
<organization>
<name>my-company</name>
<url>https://www.my-company.com</url>
</organization>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<developers>
<developer>
<name>dev-test</name>
<email>dev-test@163.com</email>
<organization>my-company</organization>
<organizationUrl>https://www.my-company.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/my-project/my-project-core.git</connection>
<developerConnection>scm:git:ssh://git@github.com/my-project/my-project-core.git</developerConnection>
<url>https://github.com/my-project/my-project-core</url>
</scm>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/my-project/my-project-core/issues</url>
</issueManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<!-- 默认的是3.3版本,执行mvn site会报:java.lang.NoClassDefFoundError: org/apache/maven/doxia/siterenderer/DocumentContent -->
<version>3.12.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.3 生成site站点
执行mvn clean site
,生成的site站点位于target/site目录下,打开target/site/index.html文件,显示如下: