2012-05-15 24 views
21

我正在使用maven插件。我似乎很難弄清楚,從執行MOJO的項目中獲取POM信息的好方法是什麼?Java Maven MOJO - 從項目POM獲取信息

例如,如果我在另一個maven項目中執行我的mojo,我想獲得項目名稱或其他參數。

還有一件事情,有AbstractMojo.java類中的上下文MAP有私人地圖pluginContext,有人可以糾正我,如果我錯了,但這是假設是用於傳遞信息之間的mojos?

+1

您應該清楚指定您想要什麼以及您需要在哪裏訪問此信息。項目信息在默認情況下是可用的 –

+1

我總是詢問與創建插件有關的第一個問題:您想要實現什麼?你確定你需要編寫一個插件嗎?此外,看看其他插件,例如,maven-assembly-plugin,maven-javadoc-plugin等,看看它們是如何工作的。 – khmarbaise

+0

感謝您的提示 – Xeperis

回答

33

,你可以注入當前Maven項目到你的魔力已宣告這樣一個領域:

/** 
* @parameter default-value="${project}" 
* @required 
* @readonly 
*/ 
MavenProject project; 

的項目名稱隨後可通過簡單地調用project.getName()。 要使用此API,您需要將maven-project神器添加作爲一個依賴:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 
+1

適用於我的maven 3.0.3;添加依賴項然後注入項目! –

+0

我想我在網絡上的其他地方找到了這個答案,但被添加了以前未知的(對我的項目)依賴項的事實所困惑。這完美地清除它,謝謝。 –

18
@Component 
private MavenProject project; 

也可以(更簡潔,直觀地),如果使用新的maven-plugin-annotations,這是一種能夠創造新的mojos默認maven-archetype-plugin

EDIT(感謝@bmargulies):雖然@Component的Javadoc爲3.2建議將它用於MavenProject,顯然該已被棄用和建議被丟棄作爲3.3;該idiom suggested通過maven-plugin-tools-annotations(如3.3)是這樣的(似乎都工作):

@Parameter(defaultValue="${project}", readonly=true, required=true) 
private MavenProject project; 
+1

這已棄用。 – bmargulies

+0

好的;推薦什麼(對於使用新API的插件)? –

+2

@JörnHorstmann的答案相當於註釋。 – bmargulies

7

的首選語法現在是:

@Parameter(defaultValue = "${project}", required = true, readonly = true) 
MavenProject project; 

你將不得不爲maven-project添加一個依賴於你的插件的POM:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 

(。感謝誰已經提供了這一信息已經等這個答案將它們組合在同一個地方)

+2

也許你想添加maven-plugin-annotations工件的@Parameter註解。 –