2014-02-11 70 views
1

我指的是返回的Maven的二進制版本時,你通常從返回類似下面的輸出命令行中運行如何從自定義Mojo中獲取Maven二進制版本?

mvn --version 

Apache Maven 3.0.4 
Maven home: /usr/share/maven 
Java version: 1.6.0_45, vendor: Sun Microsystems Inc. 
Java home: /home/uvindra/Apps/java6/jdk1.6.0_45/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux", version: "3.11.0-15-generic", arch: "amd64", family: "unix" 

注意Maven的3.0版。 4。在Java中的自定義Maven Mojo中訪問它的最佳方式是什麼?有沒有可用於此的財產?

我想要運行正在執行我的魔抗電流Maven版本驗證,謝謝

+0

首先你爲什麼要知道?你的MOJO只使用特定的Maven版本嗎?使用maven-enforcer插件?你有沒有在你的pom中設置先決條件(但要小心Maven 3.X已經棄用了)。 – khmarbaise

+0

我正在爲外部用戶提供一個工具,使用[mojo-executor](https://github.com/TimMoore/mojo-executor)插件通過我的mojo執行其他的Maven插件。給定的插件可能只與某些Maven版本兼容。當他們定義用戶將在集中式系統中執行的插件時,管理員可以指定給定插件兼容的Maven版本。然後,當用戶在本地機器上執行這些插件時,我可以通過驗證其本地安裝的Maven版本來跳過不兼容的插件。 – UDJ

+0

你爲什麼要這麼做?您的方法與pom文件相比有哪些優勢?您正在嘗試創建一個運行Maven的插件?爲什麼不使用Maven本身。你遇到了什麼問題?除此之外,如果插件與Maven版本不兼容,則必須使用不同的插件版本,否則您的構建將無法工作。這必須在描述構建的pom文件中定義。出於這種目的,公司pom中的pluginManagement部分是正確的方式,強制用戶使用maven-enforcer-plugin。 – khmarbaise

回答

1

如khmarbaise所述使用getApplicationVersion()已被棄用,getMavenVersion()是推薦使用的功能。您需要將maven-core 3.0.2或更高版本作爲依賴項來使用RuntimeInformation類。

下面是完整的使用示例,

要求POM依賴

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.0.2</version> 
</dependency> 

包裝進口

import org.apache.maven.rtinfo.RuntimeInformation; 

使用

/** 
* 
* @component 
*/ 
private RuntimeInformation runtime; 

public void execute() { 
    String version = runtime.getMavenVersion(); 
    getLog().info("Maven Version: " + version); 
    ... 
} 

@khmarbaise,感謝您指出我在正確的方向

1

你可以獲取有關當前Maven的版本通過使用下面的代碼片段的信息:

@Component 
private RuntimeInformation runtime; 

public void execute() { 
    ArtifactVersion version = runtime.getApplicationVersion(); 
    getLog().info("Version: " + version); 
... 
} 

runtime還提供有關getBuildNumber(),getIncrementalVersion(),getMajorVersion(),getMinorVersion()getQualifier()的信息。 這應該適合您的需求。

+0

我似乎無法找到RuntimeInformation類,它是哪個包的一部分? – UDJ