2014-12-25 91 views
5

我想創建我的第一個Maven插件,爲此,我需要在我Mojos訪問MavenSession。我發現在很多地方,下面的代碼片段應該足夠了,但我總是以mavenSession對象爲null,儘管在Maven日誌中(使用我的插件的POM.xml中),似乎Maven會話已通過,或者至少填充 - 但不會注入到MavenSession對象中。MavenSession不填充

誰能告訴我,我缺少的是什麼?

謝謝!


/** 
* The Maven Session 
* 
* @required 
* @readonly 
* @parameter 
* expression="${session}" 
*/ 
private MavenSession mavenSession; 

我還增加了以下內容插件的pom.xml文件(基於評論我發現某處):

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

這從日誌:

[DEBUG] Configuring mojo 'com.ofernicus.helpers:resource-helper:1.0-SNAPSHOT:iterate' with basic configurator --> 
[DEBUG] (f) session = [email protected] 
[DEBUG] (f) mavenProject = MavenProject: com.ofernicus.consumers:resource-helper-consumer:1.0-SNAPSHOT @ C:\Users\oferlan\workspaces\Maven\PluginConsumer\resource-helper-consumer\pom.xml 
+0

你在談論(單元)測試時間還是關於運行時? –

+0

@RobertScholte - 我想你會稱之爲運行時 - 我試圖從不同的/單獨的Maven項目中調用這個插件。 –

+0

它在哪裏'null'?在'execute'方法的開始處? – mystarrocks

回答

2

感謝這裏的答覆,我終於找到了問題:

我試圖從已稱爲從execute()方法的方法訪問mavenSession和mavenProject。我認爲一旦注入,這些成員就可以在我的Mojo範圍內的任何地方訪問和填充 - 這是錯誤的。我將我的代碼移入execute()方法本身並解決了問題。

謝謝大家!

1

錯過參數註釋:

@Parameter(defaultValue = "${session}") 
private MavenSession session; 
+1

謝謝,哈什 - 我試過你的建議,但我仍然(MavenSession)會話爲null。 –

+1

@Hersh,不,OP沒有錯過參數註釋,他/她使用了[javadoc標籤](http://maven.apache.org/plugin-tools/maven-plugin-tools-java/index。 HTML),而這雖然不被推薦仍然可以工作。 – mystarrocks

0

Maven在底層使用plexus將maven項目/ pom.xml中的組件/元素插入到插件項目中,因此您必須確保包含相關的依賴關係。

這裏的依賴關係的完整列表,你可以包括你的pom.xml將所有必要的依賴過渡地進入你的項目。

,喜歡mojo annotationsmojo javadoc tags。您可以獲取插入工具的完整圖片,其中包含讀取this

<properties> 
    <pluginTools.version>3.3</pluginTools.version> <!-- be sure to use the latest version in here --> 
</properties> 

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-tools-api</artifactId> 
    <version>${pluginTools.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>${pluginTools.version}</version> 
    <scope>provided</scope> 
</dependency> 
+2

表達式:'Maven使用pluxus'不再是真的了,因爲Maven 3.0在引擎蓋下使用了guice。但它具有兼容性層(sisu)來支持較老的插件(請參閱https://jira.codehaus.org/browse/MNG-4749)。 – khmarbaise

1

看起來你有兩個字段的引用:在你的代碼調用此領域mavenSession,但看着Maven的輸出時,它指的是session。它看起來像你在質疑一個不適當注入。

+0

我實際上已經定義了session和mavenSession,一旦通過@Parameter注入,另一個通過JavaDoc標籤注入 - 但都是空的。無論如何 - 問題現在已經解決了(正如我在自己的回答中所添加的)。 –