Maven插件介绍二
Maven常用插件
Maven – Available Plugins 了解更多maven插件。。
maven-compiler-plugin
编译插件,主要参数为:
Source: 源文件JDK版本
Target:目标类文件JDK版本
Encoding: 编译字符, 默认是${project.build.sourceEncoding}
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>${project.build.sourceEncoding}</encoding> <compilerArgs> <compilerArg>-parameters</compilerArg> </compilerArgs> </configuration> </plugin> |
maven-assembly-plugin
工具插件, 用于将项目打包为一个可对外分发的文件, 如zip等压缩文件。 通常用于持续集成和持续部署中在项目package成jar后再和其他运行文件, 如执行脚本等一起打包分发到服务器中进行自动化部署。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> |
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>package</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}/</directory> <outputDirectory></outputDirectory> <includes> <include>app.jar</include> </includes> </fileSet> <fileSet> <directory>bin</directory> <outputDirectory>/bin</outputDirectory> <fileMode>777</fileMode> </fileSet> <fileSet> <directory>tmp</directory> <outputDirectory>/tmp</outputDirectory> <fileMode>777</fileMode> </fileSet> </fileSets> </assembly> |
maven-resources-plugin
负责将项目的资源文件拷贝到目标目录, 为后续打包阶段做好准备。
nonFilteredFileExtension: 指定额外不被过滤的文件后缀
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <nonFilteredFileExtensions> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> <nonFilteredFileExtension>ttf</nonFilteredFileExtension> <nonFilteredFileExtension>ttc</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> |
maven-javadoc-plugin
javadoc插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <skip>${maven.javadoc.skip}</skip> </configuration> <executions> <execution> <id>attach-javadocs</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> |
maven-surefire-plugin
用于在test阶段执行应用的单元测试
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Test.java</include> <include>**/*Spec.java</include> </includes> </configuration> </plugin> |
spring-boot-maven-plugin
Springboot 提供的导报插件,插件的核心goal是repackage, 生成可执行的jar包或war包。项目引入该插件后, mvn package将执行改插件的repackage目标。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.2.RELEASE</version> <configuration> <skip>${maven.springboot.skip}</skip> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> |
maven-dependency-plugin
dependency插件提供操作项目依赖工件的能力, 拷贝或解压本地或远程仓库的工件到指定目录。
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.5.0</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project> |
maven-enforcer-plugin
enforce 产检用于对环境进行检查。如maven版本, JDK版本等。保证项目保持统一规范。
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>enforce-versions</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedPlugins> <!-- will only display a warning but does not fail the build. --> <level>WARN</level> <excludes> <exclude>org.apache.maven.plugins:maven-verifier-plugin</exclude> </excludes> <message>Please consider using the maven-invoker-plugin (http://maven.apache.org/plugins/maven-invoker-plugin/)!</message> </bannedPlugins> <requireMavenVersion> <version>2.0.6</version> </requireMavenVersion> <requireJavaVersion> <version>1.5</version> </requireJavaVersion> <requireOS> <family>unix</family> </requireOS> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project> |
插件开发
插件开发从IDEA创建项目或Module时选择Maven工程, archetype选择mave-archetype-mojo,可以帮助快速建议一个插件工程雏形。
Maven插件介绍二
Maven常用插件
Maven – Available Plugins 了解更多maven插件。。
maven-compiler-plugin
编译插件,主要参数为:
Source: 源文件JDK版本
Target:目标类文件JDK版本
Encoding: 编译字符, 默认是${project.build.sourceEncoding}
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>${project.build.sourceEncoding}</encoding> <compilerArgs> <compilerArg>-parameters</compilerArg> </compilerArgs> </configuration> </plugin> |
maven-assembly-plugin
工具插件, 用于将项目打包为一个可对外分发的文件, 如zip等压缩文件。 通常用于持续集成和持续部署中在项目package成jar后再和其他运行文件, 如执行脚本等一起打包分发到服务器中进行自动化部署。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> |
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>package</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}/</directory> <outputDirectory></outputDirectory> <includes> <include>app.jar</include> </includes> </fileSet> <fileSet> <directory>bin</directory> <outputDirectory>/bin</outputDirectory> <fileMode>777</fileMode> </fileSet> <fileSet> <directory>tmp</directory> <outputDirectory>/tmp</outputDirectory> <fileMode>777</fileMode> </fileSet> </fileSets> </assembly> |
maven-resources-plugin
负责将项目的资源文件拷贝到目标目录, 为后续打包阶段做好准备。
nonFilteredFileExtension: 指定额外不被过滤的文件后缀
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <nonFilteredFileExtensions> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> <nonFilteredFileExtension>ttf</nonFilteredFileExtension> <nonFilteredFileExtension>ttc</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> |
maven-javadoc-plugin
javadoc插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <skip>${maven.javadoc.skip}</skip> </configuration> <executions> <execution> <id>attach-javadocs</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> |
maven-surefire-plugin
用于在test阶段执行应用的单元测试
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Test.java</include> <include>**/*Spec.java</include> </includes> </configuration> </plugin> |
spring-boot-maven-plugin
Springboot 提供的导报插件,插件的核心goal是repackage, 生成可执行的jar包或war包。项目引入该插件后, mvn package将执行改插件的repackage目标。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.2.RELEASE</version> <configuration> <skip>${maven.springboot.skip}</skip> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> |
maven-dependency-plugin
dependency插件提供操作项目依赖工件的能力, 拷贝或解压本地或远程仓库的工件到指定目录。
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.5.0</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project> |
maven-enforcer-plugin
enforce 产检用于对环境进行检查。如maven版本, JDK版本等。保证项目保持统一规范。
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>enforce-versions</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedPlugins> <!-- will only display a warning but does not fail the build. --> <level>WARN</level> <excludes> <exclude>org.apache.maven.plugins:maven-verifier-plugin</exclude> </excludes> <message>Please consider using the maven-invoker-plugin (http://maven.apache.org/plugins/maven-invoker-plugin/)!</message> </bannedPlugins> <requireMavenVersion> <version>2.0.6</version> </requireMavenVersion> <requireJavaVersion> <version>1.5</version> </requireJavaVersion> <requireOS> <family>unix</family> </requireOS> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project> |
插件开发
插件开发从IDEA创建项目或Module时选择Maven工程, archetype选择mave-archetype-mojo,可以帮助快速建议一个插件工程雏形。
POM文件
默认生成项目的POM文件版本较低, 需要做以下修改:
- 升级maven-plugin-api包版本到3.8.3。自动生成POM的版本是低版本的2.0;
- 添加maven-plugin-annotations依赖,这个包内包含了Maven相关的注解,可以取代Tag;
- 添加maven-plugin-plugin插件依赖,这个包可以使插件支持JDK1.8以上的版本;
核心入口类
@Mojo(name = "sayHi") public class MyMojo extends AbstractMojo { @Parameter(name = "name", defaultValue = "test") private String name; public void execute() { getLog().info("This is sayHi to " + name); } } |
@Mojo定义一个插件目标,name对应目标名字, 通过mvn 插件名:目标名,可以执行目标。
@Parameter配置<Parameter>标签内容
AbstractMojo: 继承AbstractMojo,实现execute方法就完成了插件的开发。
编译、打包和部署
Maven mojo插件提供生命周期过程中相应阶段的试下, 同普通maven项目一样进行编译、打包和部署。
使用
独立开发的插件使用同官方一样,应用项目POM文件中引入插件, 根据需要绑定生命周期中的特定阶段或独立运行。
mybatis-generator-maven-plugin
mybatis generator是开发中常用的maven插件,项目源码地址:
https://github.com/mybatis/generator/tree/master/core/mybatis-generator-maven-plugin
@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.TEST) public class MyBatisGeneratorMojo extends AbstractMojo { |
增强工具 mybatis plus 也提供相应的代码生成插件。
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis-plus-generator.version}</version> </dependency> |
在此衍生出各类定制的代码规范生成工具, 项目中除了Controller-Service-Dao的代码规范外还有很多类似的场景可以参考这两个工具实现合适的代码生成工具,如通用的对外接口代码规范。