Maven 插件是扩展 Maven 功能的组件,每个插件包含一个或多个目标(goals)。Maven 的核心功能都是通过插件实现的。
编译 Java 源代码
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> </configuration> </plugin>
运行单元测试
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0</version> <configuration> <includes> <include>**/*Test.java</include> <include>**/*Tests.java</include> </includes> </configuration> </plugin>
创建 JAR 文件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </plugin>
插件 | 功能 | 常用目标 |
---|---|---|
maven-clean-plugin | 清理构建目录 | clean |
maven-resources-plugin | 处理资源文件 | resources, testResources |
maven-compiler-plugin | 编译源代码 | compile, testCompile |
maven-surefire-plugin | 运行单元测试 | test |
maven-jar-plugin | 创建 JAR 包 | jar |
maven-war-plugin | 创建 WAR 包 | war |
maven-install-plugin | 安装到本地仓库 | install |
maven-deploy-plugin | 部署到远程仓库 | deploy |
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <copy todir="${project.build.directory}/config"> <fileset dir="src/main/config"/> </copy> </target> </configuration> </execution> </executions> </plugin>
Spring Boot 应用构建插件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.0</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
创建包含依赖的 uber-jar
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
创建自定义分发包
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.4.2</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
在父 POM 中使用 pluginManagement 统一管理插件版本:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </pluginManagement> </build>
创建自定义 Maven 插件的基本步骤:
@Mojo(name = "hello", defaultPhase = LifecyclePhase.COMPILE) public class HelloMojo extends AbstractMojo { @Parameter(property = "hello.message", defaultValue = "Hello World!") private String message; public void execute() throws MojoExecutionException { getLog().info(message); } }