Maven 实战系列(六)插件总结
Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由 maven-compiler-plugin
完成的。每个插件会有一个或者多个目标(goal),例如 maven-compiler-plugin
插件的 compile
目标用来编译位于 src/main/java/
目录下的主源码,testCompile
目标用来编译位于 src/test/java/
目录下的测试源码。
用户可以通过两种方式调用 Maven 插件目标:
- 将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如 Maven 默认将
maven-compiler-plugin
的compile
目标与compile
生命周期阶段绑定,因此命令mvn compile
实际上是先定位到compile
这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin
的compile
目标。 - 直接在命令行指定要执行的插件目标(goal),例如
mvn archetype:generate
就表示调用maven-archetype-plugin
的generate
目标,这种带冒号的调用方式与生命周期无关。
常用插件整理如下:
核心插件
maven-clean-plugin
maven-resources-plugin
maven-compiler-plugin
https://maven.apache.org/plugins/maven-compiler-plugin/index.html
https://docs.oracle.com/en/java/javase/11/tools/javac.html
配置 javac
编译使用指定的 JDK
https://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html
配置 javac
编译版本
1 | # -source Specifies the version of source code accepted. |
https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
方式一
1 | <project> |
方式二:
1 | <project> |
配置 javac
编译参数
https://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html
1 | <project> |
maven-surefire-plugin
配置默认 Skip Tests
https://maven.apache.org/surefire/maven-surefire-plugin/examples/skipping-tests.html
方式一:
1 | <project> |
方式二:
1 | <project> |
maven-install-plugin
maven-deploy-plugin
打包工具
maven-jar-plugin
maven-war-plugin
其它工具
maven-archetype-plugin
用于生成骨架,详见:Maven 骨架快速搭建项目。
maven-assembly-plugin
用于将项目输出及其依赖项、模块、站点文档和其它文件聚合构建成一个可执行的分发包。
项目简单配置如下:
1 | <build> |
执行 Goal assembly:single
,将在 target 目录中生成一个 artifactId-version-jar-with-dependencies.jar
文件,内含所需的所有依赖,执行 java -jar
即可运行。
maven-dependency-plugin
用于分析项目依赖,例如通过 mvn dependency:tree
命令分析 Dubbo 默认依赖的第三方库:
1 | [INFO] +- com.alibaba:dubbo:jar:2.5.9-SNAPSHOT:compile |
Spring Boot 插件
Spring Boot 提供了 spring-boot-maven-plugin
插件,可用于本地快速编译并运行、及项目打包。参考:Maven 插件。
IDEA Maven 插件
最后来看下 IDEA Maven 插件提供的 Maven Projects tool window 功能: