大家可能都知道maven是什么?Maven 是一个流行的项目管理工具,用于构建、发布和管理 Java 项目。那么我们在用maven将项目打包成一个jar包的时候,他是怎么运作的,mvn clean install都做了哪些小动作?其中的package和install有什么区别?deploy命令又是干什么的?不知道这些问题大家有没有想过?
Maven生命周期包括三个主要阶段:clean、default、site。
-
clean生命周期:用于清理项目,包括删除target目录中生成的文件。
-
default生命周期:包括validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、process-classes、generate-test-sources、process-test-sources、generate-test-resources、process-test-resources、test-compile、process-test-classes、test、prepare-package、package、pre-integration-test、integration-test、post-integration-test、verify、install、deploy等阶段。
-
site生命周期:用于生成项目站点文档等内容。
而我们这次就讲idea中的主要用到的命令,我们先来看一张图(idea中的maven工具栏,默认在idea的右侧):
这里有这么多命令,大家知道他们的具体作用是干嘛的吗?而他们又做了哪些小动作呢?这些统称为maven的生命周期。首先我们来了解他们之前先看一下maven的本地仓库:
上面就是maven的本地仓库,即maven默认会从本地拿到项目中用到的jar包,如果没有就会从中央仓库拉,之后在存到本地里面。简单介绍一下,废话不多说,我们现在开始介绍maven的生命周期。开始之前想跟大家说一个冷知识:
执行maven命令和直接点击idea中的maven菜单按钮都是可以的,但是如果手动执行maven命令的化,需要添加很多的参数,例如默认只会读取默认的setting文件,而idea中的maven菜单则会根据项目的maven已经设置过的东西进行参数的拼接(他的底层也是执行maven的命令)
我们现在有一个项目的pom文件长这样(他是一个springboot项目)
clean:清理项目,删除之前构建生成的文件
现在我们在项目运行的过程中生成了一个jar包。如果我们运行clean的话,这个时候,我们就会发现项目目录下的target
文件夹就会被清除掉。
validate: 验证项目是否正确,检查项目是否符合规范
它主要做了下面几个验证:
验证项目是否有pom.xml文件。
验证pom.xml文件是否符合Maven的XML格式要求。
验证所有必要的属性是否已经设置。
验证项目的依赖是否正确,无误。
验证编译源代码的编码是否正确。
例如我们把pom文件删掉
然后执行我们的mvn validate
他就会检测失败,而添加之后再次执行,就会执行成功了
compile:编译项目源代码,将源代码编译成可执行的字节码
这个命令是会生成target目录下面的classes文件,这个里面则是编译好的字节码文件,如果有main函数则是可以直接运行的
test:运行测试代码,执行单元测试和集成测试
例如我们现在有个一单元用例:
package com.wangfugui.apprentice;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApprenticeApplicationTests {
@Test
public void test() {
System.out.println("测试");
}
}
我们执行这个命令之后就会把这个单元用例里面的每个方法都执行一遍:
package:将编译后的代码打包成可分发的格式,如 JAR、WAR 等。
这个命令默认会在target目录下生成jar包,如果有maven插件指定生成路径则是另说。
verify:对集成测试的结果进行验证,确保测试通过
它其实也会执行单元测试,但是他和test有什么区别呢?为了验证他们的区别,我们需要引入一个maven的插件
<build>
<plugins>
<!-- 插件用于执行静态代码分析 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>validate</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-checkstyle-plugin 用于执行静态代码分析,具体功能包括:
- 代码风格检查:检查代码是否符合预定义的代码风格规范,如缩进、命名规范、代码注释等。
- 代码质量检查:分析代码质量,发现潜在的代码问题,如未使用的变量、重复的代码、复杂的逻辑等。
- 代码规范性检查:检查代码是否符合编码规范,帮助团队保持一致的编码风格和规范。
我们执行verify
就会发现测试失败了,原因是这个类缺少空行结尾,现在我们把他修复,我们就会发现刚刚那个错误就没有了。
但是这个在实际项目的过程中并不会用到(谁去检测是否以换行结尾啊。。。)大家了解一下就行。
install:将包安装到本地仓库,供本地其他项目使用
这个命令就要说道我们前面提到的本地maven仓库了,执行这个命令之后,maven会把打出的jar包放入我们的maven本地仓库,这样其他的项目就可以引用这个jar包了
site:生成项目站点文档,包括项目报告、文档和静态内容
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.1</version>
</plugin>
</plugins>
</build>
试图这个功能之前,需要引入一个maven的插件。maven-site-plugin 是 Maven 中的一个核心插件,用于生成项目站点文档。通过配置这个插件,大家可以在 Maven 构建过程中执行 site 命令来生成项目站点文档。以下是这个插件的一些主要功能和用途:
- 生成项目站点文档:maven-site-plugin 插件用于生成项目站点文档,包括项目报告、文档和静态内容,以展示项目的信息和文档。
- 集成各种报告:该插件可以集成各种 Maven 报告,如测试报告、代码覆盖率报告、静态代码分析报告等,以展示项目的各种指标和结果。
- 自定义站点内容:您可以通过配置插件参数来自定义生成的站点内容,包括添加额外的文档、报告和静态资源。
- 支持多种输出格式:maven-site-plugin 支持生成站点文档的多种输出格式,如 HTML、PDF 等,以满足不同的需求。
例如我们执行完项目文件之后会在target/site
目录下面生成一个静态网站:
我们点开看看是这样的:
默认情况下,通过 Maven 的 maven-site-plugin 插件生成的项目站点文档通常包含以下内容:
- 项目概况:包括项目的名称、描述、版本号等基本信息。
- 项目报告:包括各种 Maven 插件生成的报告,如测试报告、代码覆盖率报告、静态代码分析报告等。
- 项目结构:展示项目的目录结构、模块依赖关系等信息。
- 开发者信息:列出项目的开发者、贡献者等相关信息。
- 源码文档:包括 Java 源代码的文档,通常是通过 Javadoc 工具生成的 API 文档。
- 邮件列表:列出项目相关的邮件列表信息。
- 版本控制信息:包括项目的版本控制信息,如提交记录、分支信息等。
问题追踪:列出项目的问题追踪系统信息,如 JIRA、Bugzilla 等。 - 构建信息:展示项目的构建信息,包括构建时间、构建环境等。
- 发布信息:包括项目的发布信息,如发布版本、发布日期等。
deploy:将最终包复制到远程仓库,供其他开发人员或项目使用
这里会打包发布到中央的maven仓库,这样不管别人在哪都可以直接拉你的jar到他的项目中去使用,大家可以参考我之前写的博客:
如何发布jar包到maven中央仓库(2024年3月最新版保姆级教程)