2012-12-19 12 views
5

私はマルチモジュールプロジェクトを持っており、すべてのサブモジュールにmaven-compiler-pluginをルートpom.xmlで指定したいと思っています。私はmaven-compiler-plugin宣言(ルートpom.xml):<plugins>セクションまたは<pluginManagement>セクションに配置する必要がありますか?質問はmaven-release-pluginにも関連します。どこにmaven-compiler-plugin宣言を置く必要がありますか:<plugins>または<pluginManagement>?

答えて

12

これらの2つのセクション(pluginspluginManagement)は、わずかに目的が異なります。

最初のプロジェクト(plugins)は、プロジェクト(および親プロジェクトから継承したすべての子プロジェクト)のビルドプロセスを指定するために使用されます。このセクションにいくつかのプラグインを含めると、そのタイプに関係なく各子プロジェクトで実行されます。

2番目のファイル(pluginManagement)は、親プロジェクトから継承したすべてのプロジェクト(たとえば、プラグインのバージョンと設定)に共通のプラグイン設定を指定するために使用されます。

あなたが言及した2つのプラグインといえば、 maven-compiler-pluginは、指定したかどうかにかかわらず実行されるデフォルトのプラグインです。それをpluginManagementに含めてそこにその構成を指定することは意味があります。ただし、maven-release-pluginは、デフォルトではライフサイクルフェーズにバインドされていません。ですから、すべての子プロジェクトで実行されたい場合は、それをpluginsセクションに追加する必要があります。

+0

明確な回答ありがとうございます。 'maven-compiler-plugin'が' maven-release-plugin'とは対照的にデフォルトで実行されないのはなぜですか?ライフサイクルフェーズでデフォルトで実行されるプラグインのリストはどこから見ることができますか? – MyTitle

+0

ようこそ。デフォルトのプラグインのリストとその目標は、プロジェクトのパッケージ化によって異なります。あなたはそれについて[ここ](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings)を読むことができます(実際には、ページ全体が読む価値があります)。 –

+0

また、 'maven-surfire-plugin'はどうですか?あなたの説明の後、私はpluginManagementの中に置かなければならないと思っています。なぜならそれはMavenの "テスト"段階に縛られているからです。本当ですか? – MyTitle

0

あなたの状況によって異なります。 pluginsセクションに含めると、を含むすべてのPOM ... に対して実行されます。子POMにプラグインの目標を実行させたい場合は、pluginManagementの下に配置する必要があります。ただし、その場合は、各子POMで有効にする必要があります。

しかし、最も簡単なことは、最初にpluginsの下に試してみることです。ビルドの失敗がなければ、あなたは良いことです。それ以外の場合は、一部またはすべてをpluginManagementに移動する必要があります。

+0

''セクション(ルートのpom.xmlの場合)では、必要なすべてのプラグインをサブモジュールでデカールできます(サブモジュールで明示的にsprcifyingせずに)。また、 ''の内部で_configuration_(例えばversion)のプラグインのみを宣言していますが、それでもサブモジュールで宣言する必要がありますか? – MyTitle

関連する問題