2017-01-19 17 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