maven插件
Maven 插件
是 Maven 构建工具的核心组件,用于扩展 Maven 的功能,实现项目的编译、测试、打包等具体任务。
插件与生命周期的关系。
Maven 定义了三个标准生命周期(clean、default/build、site),每个生命周期包含多个阶段(如 compile、test 等)。每个阶段的具体实现由对应的 Maven 插件完成,例如 maven-compiler-plugin 负责编译阶段的任务
插件的坐标。
每个插件通过 groupId、artifactId 和 version 唯一标识。例如 maven-compiler-plugin 的坐标为 org.apache.maven.plugins:maven-compiler-plugin。
maven-compiler-plugin
是 Apache Maven 中的核心插件之一,主要用于编译 Java 源代码。它控制着编译过程中的关键参数(如 JDK 版本、编译选项),确保项目代码能按照指定的 Java 版本和编译规则进行编译。
-
编译源代码
将src/main/java目录下的 Java 源文件(.java)编译为字节码(.class),输出到target/classes目录。 -
配置编译参数
- 指定 Java 版本(如 Java 8/11/17)
- 设置编译选项(如编码、警告级别)
- 管理注解处理器(如 Lombok、MapStruct)
- 多模块编译:在多模块项目中协调编译顺序。基于依赖关系确定编译顺序。统一管理编译参数(Java 版本、编码等)。优化编译性能(并行、增量编译)。
-
验证依赖
确保编译时能正确找到所有依赖的类库(如 JDK 类库、第三方 JAR)。
mvn clean -U package:
clean:删除之前的构建输出(target目录),maven-clean-plugin删除target目录,确保构建环境干净。-U:强制更新远程仓库的快照依赖- compile:
maven-compiler-plugin被触发,执行以下操作:读取pom.xml中的配置(如 Java 版本、编译参数)加载依赖的 JAR 文件(包括 JDK 和第三方库),编译源代码,处理注解(如生成 Lombok 的 getter/setter), - 编译完成后,其他插件继续执行:
package:执行打包操作(如生成 JAR/WAR)
MavenProject
MavenProject 是 Apache Maven 中的核心概念,代表一个 Maven 项目的抽象模型。理解 MavenProject 对于定制插件开发、构建流程自动化以及高级项目配置至关重要
MavenProject 是 org.apache.maven.project.MavenProject 类的实例,包含了从 pom.xml 解析而来的所有项目信息,如依赖、插件、构建配置等。
作用:
- 在 Maven 插件中通过
MavenProject访问项目元数据。 - 用于插件开发时修改或扩展构建行为。
- 在生命周期阶段中传递项目状态。
MavenProject 包含以下关键属性:
1. 基本信息
project.getGroupId(); // 获取项目组 ID
project.getArtifactId(); // 获取项目工件 ID
project.getVersion(); // 获取项目版本
project.getName(); // 获取项目名称
project.getDescription(); // 获取项目描述
2. 依赖管理
project.getDependencies(); // 获取直接依赖列表
project.getDependencyManagement(); // 获取依赖管理配置
project.getArtifacts(); // 获取解析后的依赖工件
3. 构建配置
project.getBuild(); // 获取构建配置
project.getPluginArtifacts(); // 获取插件依赖
project.getCompileSourceRoots(); // 获取编译源路径
4. 生命周期与阶段
project.getExecutionPlan(); // 获取执行计划
project.getPluginMap(); // 获取插件映射
project.getReportPlugins(); // 获取报告插件
在自定义 Maven 插件中,可以通过 @Parameter 注解注入 MavenProject 实例
flatten-maven-plugin
一个由 MojoHaus 维护的 Maven 插件,旨在解决多模块 Maven 项目中 POM 文件继承导致的复杂依赖问题,
扁平化 POM 文件:生成一个简化版的 pom.xml文件(默认命名为 .flattened-pom.xml),去除不必要的继承和依赖管理结构,仅保留必要的配置信息。
解决版本占位符问题:在多模块项目中,父模块通常通过占位符(如 ${revision})定义版本号,子模块继承后打包时这些占位符可能不会被正确替换。该插件可在构建过程中动态替换这些占位符,确保生成的 POM 文件可被正确解析
统一版本管理:通过在父模块中定义版本号变量,所有子模块继承该变量实现统一管理,减少手动修改版本号的工作量
构建部署:Maven 在 install 和 deploy 阶段会使用 .flattened-pom.xml 文件替代原始 pom.xml 文件。
对于大型项目,可通过调整 flattenMode 减少生成的 POM 文件体积。
spring-boot-maven-plugin
是 Spring Boot 提供的官方 Maven 插件,用于简化 Spring Boot 应用的构建、打包和运行过程。它集成了 Spring Boot 的特性(如依赖管理、嵌入式服务器、分层 JAR/WAR 等),让开发者可以更高效地构建可执行的 Spring Boot 应用。
打包可执行 JAR/WAR:生成包含所有依赖的单一可执行文件。
直接运行应用:无需手动打包,通过 mvn spring-boot:run 直接启动应用。
依赖优化:自动排除不必要的依赖,减小打包体积。
分层 JAR:将应用类和依赖分离为不同层,加速容器镜像构建。
支持 AOT(提前编译):从 Spring Boot 3.0 开始支持,生成优化的原生镜像。
mybatis-generator-maven-plugin
是 MyBatis 官方提供的 Maven 插件,用于自动生成 MyBatis 的实体类、Mapper 接口和 XML 映射文件。它通过读取数据库表结构,按照配置规则生成基础代码,大幅减少手动编写 CRUD 代码的工作量。
使用:1在 pom.xml 中添加插件配置,2generatorConfig.xml配置,3mvn mybatis-generator:generate或在idea界面执行mybatis-generator:generate 目标
自动化代码生成:根据数据库表结构生成实体类、Mapper 接口和 XML 文件。
支持多种数据库:MySQL、Oracle、PostgreSQL、SQL Server 等。
自定义配置:通过 XML 配置文件定制生成规则(如包名、表前缀过滤)。
插件扩展:支持自定义插件修改生成逻辑。
增量生成:保留手动修改的代码,仅更新自动生成的部分。
Maven插件开发
使用 Maven 插件开发框架,如 Maven Plugin API,创建一个 Maven 项目来存放插件代码
mvn archetype:generate -DgroupId=com.example -DartifactId=my-maven-plugin -DarchetypeArtifactId=maven-archetype-plugin -DinteractiveMode=false
在 pom.xml 文件中,添加 Maven Plugin API 和插件注解的依赖:
<dependencies>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!--打包类型-->
<packaging>maven-plugin</packaging>
创建 Mojo (Maven plugin goal),使用 @Mojo 注解来标识这个类是一个 Mojo
package com.example;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@Mojo(name = "hello")
public class HelloWorldMojo extends AbstractMojo {
@Parameter(property = "name", defaultValue = "World")
private String name;
public void execute() throws MojoExecutionException {
getLog().info("Hello " + name + "!");
}
}
配置插件的元数据:在 src/main/resources/META-INF/maven/plugin.xml 中配置插件和 Mojo。
打包和安装插件:使用 Maven 的 package 和 install 命令来构建和安装插件:mvn package install
使用插件
通过 <plugins> 部分引用插件,运行项目时,Maven 将执行插件mvn my-maven-plugin:hello,或者如果在项目的 pom.xml 中配置了执行,只需运行:mvn package // 或者 mvn install,取决于配置和需要执行的目标。
goals插件在特定执行实例中要执行的具体目标(goal)
<build>
<plugins>
<plugin>
<groupId>com.example</groupId>
<artifactId>my-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version> <!-- 或者其他版本 -->
<executions><!-- 执行单元 -->
<execution>
<goals>
<goal>hello</goal> <!-- 与 Mojo 的 name 对应 -->
</goals>
<configuration> <!-- 可选配置 -->
<name>Maven User</name> <!-- 与 Mojo 的 @Parameter 属性对应 -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在 Maven 的pom.xml文件里,插件能够实现编译代码、运行测试、生成文档、打包部署等一系列构建任务。
- 构建插件(Build Plugins):会在项目构建过程中执行,需要在
build/plugins节点下进行配置。 - 报告插件(Reporting Plugins):在生成项目站点文档时发挥作用,要在
reporting/plugins节点中配置。
<project>
...
<build>
<plugins>
<!-- 构建插件配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<!-- 报告插件配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</reporting>
...
</project>
常见插件目标与阶段绑定
| 插件 | 常见目标 | 典型绑定阶段 |
|---|---|---|
| maven-compiler-plugin | compile, testCompile | compile, test-compile |
| maven-surefire-plugin | test | test |
| maven-jar-plugin | jar | package |
| maven-deploy-plugin | deploy | deploy |
| exec-maven-plugin | exec, java | 自定义(如 generate-sources) |
更多推荐



所有评论(0)