You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:36:04