在Maven插件MOJO执行过程中如何获取Maven版本等元数据?
Maven插件内部获取Maven版本与运行时Java版本方案
1. 获取当前运行的Maven版本
推荐通过Maven官方提供的注入组件获取,兼容性和准确性更高:
- 首先确保你的插件pom中已引入Maven插件开发相关依赖:
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.0+</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.6.0</version> <scope>provided</scope> </dependency>
- 在你的Mojo类中注入
RuntimeInformation组件,直接调用对应方法取版本:
import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.rtinfo.RuntimeInformation; @Mojo(name = "collect-meta") public class MetaCollectMojo extends AbstractMojo { // 自动注入Maven运行时信息组件 @Component private RuntimeInformation runtimeInformation; @Override public void execute() throws MojoExecutionException { String mavenVersion = runtimeInformation.getMavenVersion(); getLog().info("Maven版本:" + mavenVersion); } }
如果要兼容Maven 3.0以下的旧版本,可以直接读取系统属性System.getProperty("maven.version")获取版本信息
2. 获取构建过程使用的Java版本
分为两种场景按需获取:
2.1 获取Maven进程本身运行的JDK版本
这个和mvn -v命令输出的Java版本完全一致,直接读取系统属性即可:
String runningJavaVersion = System.getProperty("java.version");
2.2 获取项目编译配置的目标Java版本
如果需要取maven-compiler-plugin中配置的source/target/release版本,可以注入MavenProject对象读取属性:
import org.apache.maven.project.MavenProject; @Mojo(name = "collect-meta") public class MetaCollectMojo extends AbstractMojo { @Component private MavenProject project; @Override public void execute() throws MojoExecutionException { String sourceVersion = project.getProperties().getProperty("maven.compiler.source"); String targetVersion = project.getProperties().getProperty("maven.compiler.target"); String releaseVersion = project.getProperties().getProperty("maven.compiler.release"); } }
如果项目未显式配置以上编译属性,对应返回值为null,默认和Maven运行的JDK版本保持一致
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

