11

configuration次のセクション内で構成できるMavenプラグインを分析していますplugin

<plugin>
     ...
     <executions>...</executions>
     <configuration>
         <!-- items placed here are visible to the MOJO -->
     </configuration>
</plugin>

executionただし、プラグインは、の構成アイテムを完全に無視します。

<plugin>
     ...
     <executions>
         <execution>
             <id>execution1</id>
             <phase>test</phase>
             <goals><goal>test</goal></goals>
             <configuration>
                <!-- items placed here are ignored -->
             </configuration>
         </execution>
     </executions>
</plugin>

Mavenをで実行しmvn testます。Mavenは正しく印刷するので、実行は確実に行われますが、プラグインは構成されていません。セクションがの外に移動idしたときに存在しない誤った設定に関する警告を出力します。<configuration><executions>

質問:プラグインが「トップレベル」の構成のみを受け入れるのは、プラグインの実装方法ですか?私はそのソースコードを調べましたが、MOJOクラスでセッターを呼び出すのはMavenであり、オプションがどのセクションから来たのかはプラグインに対して透過的であるように見えました。

MOJOには次の注釈が付けられています。

* @component
* @goal test
* @phase test
* @execute phase="jasmine-process-test-resources"
4

2 に答える 2

4

問題のプラグインは、カスタムライフサイクルをフォークしています。

フォークされたカスタムライフサイクルでは、指定されたID(execution1)が削除された実行が行われます(フォークされたライフサイクルであるため)

したがって、フォークされたライフサイクルによって実行されるプラグインの目標はいずれも、構成が失われます。メインのmojo自体が構成を取得する必要がありますが、問題はフォークされたライフサイクルの実行です。

私はそれがどのプラグインであるかを推測しています、私の推測が正しければ、これはカスタムライフサイクルであり、あなたが見ている警告は例えば他のモジョから来ています

JavaScript source folder was expected but was not found. Set configuration property
`jsSrcDir` to the directory containing your JavaScript sources. Skipping 
jasmine:resources processing.

このような状況では、<configuration>セクションを外側のブロックに配置するか、ライフサイクルの実行を構成する必要があります。

ライフサイクルの実行を構成するにidは、魔法の形式のsを使用して実行を追加する必要があります。私は100%確実ではありませんが、あなたの場合、構成が確実に行われるようにするために、またはidのいずれかを使用して追加の実行を定義することになります。default-resourcesjasmine-lifecycle-resources

冗長性の少ない方法は、構成を外側のセクションに配置して、それで完了することです。

于 2013-01-29T15:15:09.480 に答える
0

Dockerイメージmaven-install-plugin:2.5.2を使用するベースでこの問題が発生しました。maven:3.6.3-jdk-8

私を正しい軌道に乗せてくれた受け入れられた答えに感謝します。

ドキュメント(セクションの最後)にあるこのメモを完全には理解していませんが、フェーズの目標に実行IDを指定して、構成を使用するように強制できるようです。

注:要素内の構成は、バインドされているライフサイクルフェーズが呼び出されたときにのみ適用されるため、コマンドラインから直接呼び出すことができないという点で、外部の構成とは異なります。そのため、プラグインのすべての呼び出しにグローバルに適用するには、構成セクションを実行セクションの外に移動する必要がありました。Maven 3.3.1以降、コマンドラインでプラグインの直接目標呼び出しの実行IDを指定できるため、これは当てはまりません。したがって、上記のプラグインを実行し、コマンドラインから特定のexecution1の構成を実行する場合は、次のコマンドを実行できます。

mvn myqyeryplugin:queryMojo@execution1

私の最後の動作するDockerコマンド:

docker run -it --rm --name parser -v "$(shell pwd)":/usr/src/parser -w /usr/src/parser maven:3.6.3-jdk-8 mvn -X install:install-file@install-my-jar-file

install-my-jar-file私の処刑IDはどこにありますか<execution><id>install-my-jar-file</id>...

于 2021-03-25T01:46:53.290 に答える