maven项目打包构建的日志分析
本文目的
上一篇,maven项目的依赖调解机制。
当我们在执行mvn clean install
命令时,或者idea
执行clean install
时,我们会看到控制台打印一堆的日志,最后在项目的target
文件夹下出现打好的jar
包。
那打印的那一堆日志到底做了什么事情,以前没有具体看过,这里总结一下这个过程。
正文
其实应该先引出Maven的另外两个核心概念生命周期
、插件
。但是我觉得还是反过来说,先看下我们经常用的命令clean install
,在执行的时候干了什么。
1. 构建依据
clean install
后,项目会执行很多东西,具体执行的内容,都会基于插件
的实现。所以在日志里,你会看到好多的带有XXX-plugin
的东西,而插件的执行顺序、范围都是基于生命周期的定义来做的。
那这些插件是哪里来的呢?基本就是三个地方
- 当前项目
pom.xml
中对应的<plugins>
标签中定义的。 - 父项目的
pom.xml
中对应的<plugins>
标签中定义,当前项目继承的。 - 根
pom
,即maven
安装包对应的/lib/maven-model-builder-xxx.jar/org/apache/maven/pom-4.0.0.xml
中。
2. 具体日志
在项目进行构建时,这些插件就会按照生命周期的定义进行执行,下边是我将自己项目打包的日志贴了出来,参考下:
/**1. 扫描项目 **/
[INFO] Scanning for projects...
[INFO]
/**2. 开始构建项目 **/
[INFO] ------------------------------------------------------------------------
[INFO] Building znxd-base-master 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
/**3. 使用maven-clean-plugin插件,先清除maven项目的target文件内容**/
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ znxd-base-master ---
[INFO] Deleting E:\znworkspace\znxd-base-master\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ znxd-base-master ---
/**4. 使用maven-resources-plugin插件,拷贝src/main/resources中文件到target/classes下**/
[INFO] Using 'UTF-8' encoding to copy filtered resources.
/**5. 正在拷贝src/main/resources下的21个文件**/
[INFO] Copying 21 resources
[INFO]
/**6. 使用maven-compiler-plugin插件,编译src/main/java下文件**/
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ znxd-base-master ---
[INFO] Changes detected - recompiling the module!
/**7. 正在编译src/main/java下的102个文件,将编译后文件拷贝到/target/classes下**/
[INFO] Compiling 102 source files to E:\znworkspace\znxd-base-master\target\classes
/**8. 后边是编译过程中的一些警告**/
[INFO] /E:/znworkspace/znxd-base-master/src/main/java/com/agri/utils/Okhttp3Utils.java: E:\znworkspace\znxd-base-master\src\main\java\com\agri\utils\Okhttp3Utils.java使用或覆盖了已过时的 API。
[INFO] /E:/znworkspace/znxd-base-master/src/main/java/com/agri/utils/Okhttp3Utils.java: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
[INFO] /E:/znworkspace/znxd-base-master/src/main/java/com/agri/framework/web/controller/user/SysUserController.java: 某些输入文件使用了未经检查或不安全的操作。
[INFO] /E:/znworkspace/znxd-base-master/src/main/java/com/agri/framework/web/controller/user/SysUserController.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[INFO]
/**9. 再使用maven-resources-plugin插件拷贝src/test/resources中的文件到target/test-classes下**/
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ znxd-base-master ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
/**10. 因为我项目中没有src/test/resources文件夹,所以提示跳过**/
[INFO] skip non existing resourceDirectory E:\znworkspace\znxd-base-master\src\test\resources
[INFO]
/**11. 再使用maven-compiler-plugin插件,编译src/test/java下文件**/
[INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ znxd-base-master ---
[INFO] No sources to compile
[INFO]
/**12. 使用maven-surefire-plugin插件,运行src/test/java下,符合规则的单元测试类(下边 5.1 单元测试匹配规则)**/
[INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ znxd-base-master ---
[INFO] No tests to run.
[INFO]
/**13. 使用maven-jar-plugin插件,打包项目成jar**/
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ znxd-base-master ---
[INFO] Building jar: E:\znworkspace\znxd-base-master\target\znxd-base-master.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.5.RELEASE:repackage (repackage) @ znxd-base-master ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
/**14. 使用maven-install-plugin插件,进行安装,一般install插件是安装到本地仓库及target文件夹中,如果要想安装到私服上,可以看下边链接(后边有提到)**/
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ znxd-base-master ---
/**15.安装项目到自己的本地仓库中**/
[INFO] Installing E:\znworkspace\znxd-base-master\target\znxd-base-master.jar to d:\mavenJarOnline\com\znxd\znxd-base-master\1.0-SNAPSHOT\znxd-base-master-1.0-SNAPSHOT.jar
[INFO] Installing E:\znworkspace\znxd-base-master\pom.xml to d:\mavenJarOnline\com\znxd\znxd-base-master\1.0-SNAPSHOT\znxd-base-master-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 42.290 s
[INFO] Finished at: 2021-07-16T02:29:24-03:00
[INFO] Final Memory: 62M/703M
[INFO] ------------------------------------------------------------------------
3. 涉及主要插件
整个过程涉及到的主要插件作用如下:
maven-resources-plugin
:将src/main/resources
和src/test/resources
目录下的文件拷贝到target下。maven-compiler-plugin
: 将src/main/java
和src/test/java
目录下的文件拷贝到target下。maven-surefire-plugin
: 运行src/test/java
下的单元测试
。当在这个目录下的类命名,如果满足**/Test**.java
、**/*Test.java
、**/*TestCase.java
规则,在项目构建的时候,就会执行这些类,所以,一定在项目构建时,注意这些测试类是否能够正常执行,否则会报错。maven-install-plugin
: 将jar
包安装到本地仓库中。