2016-11-29 4 views
1

複数のMojosを持つmaven-pluginを開発しています。私の目標は、私のプロジェクトにアーティファクトを追加することです。 attach-artifact of maven-build-helper-pluginに似ています。しかし、私は、任意のビルドプラグインを使用したくない、私は私のモジョを通してそれをしたい。MavenのmojoでのMavenBuildHelperの使用方法

私はMavenProjectHelper.attachArtifactを使用する必要があることを知っています。 MavenProject.attachArtifactは推奨されなくなりました。

私が今持っていることは、これは(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と同じように

でMavenプラグインのPOMで宣言できるアノテーション用に Plugin Toolsが付いていますさらに明確にする
<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>3.5</version> 
    <scope>provided</scope> 
</dependency> 

、何を@Parameterに注入できること(特に、Mavenのセッションのsession、現在のMavenプロジェクトのためのprojectまたは現在のモジョの実行のためのmojoExecutionPluginParameterExpressionEvaluatorクラスのJavadocの中に文書化されています。

+0

ありがとうございます!出来た。私が 'role'の価値を手作業で与えなければならない場合、それは何であり、どこでそれを見つけることができますか?たとえば、 'MavenResourcesFiltering'では、' role = org.apache.maven.shared.filtering.MavenResourcesFiltering.class'を使用しています。 –

+1

@ChurchillNolanロールは、注釈付きタイプのクラスにデフォルト設定されています。たとえば、型がコンポーネントのクラスではないフィールドに何かを注入したい場合に必要です。例: 'Archiver'には' JarArchiver'のような複数の実装があります。具体的に 'JarArchiver'を必要とするならば、あなたのフィールドは' JarArchiver'型であるので、 'JarArchiver'は' JarArchiver'のコンポーネントであるため、 'Archiver.class'であることを伝える必要があります。ロールアーカイバ)。典型的には、あなたが注入したいものの種類を区別する必要があるので、あなたは 'ヒント 'と一緒に使います。 – Tunaki

関連する問題