2017-01-19 15 views
1

我正在编写一个Maven插件,并且我需要从插件的代码中知道实际运行的Maven版本。在shell中运行MVN -version后预期的结果将是版本号(例如3.3.9),像这样:试图从插件中获取Maven的版本

$ mvn -version 
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T18:41:47+02:00) 
Maven home: /usr/local/opt/maven 
Java version: 1.8.0_111, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "mac os x", version: "10.12.2", arch: "x86_64", family: "mac" 

由于Maven的文档上有所欠缺,而谷歌搜索“Maven版本“只会给我带来关于项目版本的结果(与Apache Maven本身的版本相对),但很难得出答案。

回答

1

从Maven 3.0.2开始,您可以使用RuntimeInformation组件,该组件提供有关当前Maven运行时环境的信息。

@Component 
private RuntimeInformation runtimeInformation; 

public void execute() throws MojoExecutionException, MojoFailureException { 
    String mavenVersion = runtimeInformation.getMavenVersion(); 
    getLog().info(mavenVersion); // prints 3.3.9 when running the build with that version 
} 

getMavenVersion()正好返回当前的Maven版本的方法,而不需要任何解析:

检索当前Maven的版本,例如 “3.0.2”。

的魔咒是需要对maven-core依赖于能够找到该类:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.0.2</version> <!-- or some other version, like 3.3.9 --> 
</dependency> 
+0

正是我一直在寻找的!谢谢! – deebugger

1

可以使用用户属性maven.build.version如下:

public class Plugin extends AbstractMojo { 

    @Parameter(defaultValue = "${maven.build.version}") 
    private String mavenVersion; 

    ... 

} 

的属性将包含在你的情况下面值:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T18:41:47+02:00) 

这不正是你期待什么,但我希望这会帮助你。

+0

也是一个很好的答案,虽然@Tunaki的答案是当场上。谢谢! – deebugger