2016-11-29 31 views
1

我正在開發一個帶有多個Mojos的maven-plugin。其中之一,我的目標是附加額外的神器到我的項目。類似於attach-artifact of maven-build-helper-plugin。但我不想使用任何給定的構建插件,我想通過我的Mojo來完成。我知道我必須使用MavenProjectHelper.attachArtifact。因爲MavenProject.attachArtifact已被棄用。如何在Maven mojo中使用MavenBuildHelper

我現在有這個(在mojo.java):

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

@Parameter(defaultValue = "${helper}", required = true, readonly = true) 
protected MavenProjectHelper projectHelper; 

而且在execute方法:

projectHelper.attachArtifact(project, "plugin", file); 

但問題是,MavenProjectHelper的默認值是不${helper} 。這是爲什麼,我得到以下錯誤:

Failed to execute goal com.company.product.repo:my-plugin:1.0.1:attach-artifact (default) on project consumer-plugin: The parameters 'projectHelper' for goal com.company.product.repo:my-plugin:1.0.1:attach-artifact are missing or invalid -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginParameterException 

如何給它正確的值?像的${session},我假設MavenProjectHelper有一個默認值。如果是這樣,那是什麼?如果不是,那麼我怎樣才能給MavenProjectHelper參數給出正確的值?

回答

1

MavenProjectHelper是叢組件,而不是一個插件參數,並應通過與@org.apache.maven.plugins.annotations.Component註解做到這被注入:

Used to configure injection of Plexus components by MavenPluginManager.getConfiguredMojo(...) .

因此,你應該改爲:

@Component 
private MavenProjectHelper projectHelper; 

這注釋,就像@Parameter一樣,附帶Plugin Tools用於註釋,您可以在您的Maven插件的POM中聲明

<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>3.5</version> 
    <scope>provided</scope> 
</dependency> 

爲了進一步澄清,你可以(在Maven的會議,project當前Maven項目或mojoExecution當前的Mojo執行等等,session)注射用什麼是@ParameterPluginParameterExpressionEvaluator類的Javadoc文檔。

+0

謝謝!有效。如果我不得不手動賦予「角色」的價值,那麼它會是什麼,我在哪裏可以找到它?例如,在'MavenResourcesFiltering'中,我使用'role = org.apache.maven.shared.filtering.MavenResourcesFiltering.class' –

+1

@ChurchillNolan該角色默認爲註釋類型的類。例如,如果您想將某些東西注入到類型不是組件類的字段中,則需要這樣做。例如:'Archiver'有多個實現,比如'JarArchiver'。如果你特別想要一個'JarArchiver',而不是其他的,那麼你的字段將是'JarArchiver'類型,所以你需要告訴角色是'Archiver.class'(因爲'JarArchiver'是角色'Archiver')。通常情況下,你可以使用'hint',因爲你需要區分你想要注入什麼類型的東西。 – Tunaki

相關問題