1. ホーム
  2. java

mavenプロジェクトは複数の親を持つことができますか?

2023-09-25 22:45:11

質問

私たちはJavaとFlexのプロジェクトを持っています。現在、両方のプロジェクトで使用したい構成を含む 1 つの基本 pom があります。これの問題点は Flex プロジェクトは設定を継承しており、例えば javadocpmd のプラグインを使用することができますが、これは望ましくありません。

私はこれをきれいにして、本当のベースpomを持ちたいのです。 java-base-pomflex-base-pom . しかし、Flexの部分とJavaの部分の両方を持つマルチモジュールで、これはどのように動作するのでしょうか?

私たちは、次のような構造を使用する独自のアプリケーションにプラグインを持っています。

  • my-plugin(マイプラグイン
    • my-plugin-client(フレックス)
    • my-plugin-server(java)。

my-plugin を含むだけです。 pom.xml<modules/> セクションを作成します。私なら my-plugin pom.xmlを両方の親として使用しますが、その後、私は親としてjava base-pomまたはflex base-pomを使用することはできません。このための最良の方法は何でしょうか?

どのように解決するのですか?

プロジェクトは 1 つの親を持つことができますが (C++ の多重継承とは異なります)、この親はより大きな親階層の一部となることができます。他の人が指摘したように、したがって、次のようなものを持つことができます。

base-pom/
|-- flex-base-pom
| |-- my-plugin-client
| |-- pom.xml
|-- pom.xml
|-- java-base-pom
|-- my-plugin-server
| `-- pom.xml
|-- pom.xml
 `-- pom.xml

とはいえ、実際の問題点はそうだと書いてありましたね。

flexプロジェクトは、例えばjavadocやpmdの設定を継承しますが、これは望んでいないことです。

を使うべきです。 pluginManagement 要素を使用してください。

プラグインマネジメント はプラグインと一緒に見られる要素です。プラグイン管理は、この特定のプロジェクトビルドのためのプラグイン情報を設定するのではなく、このビルドから継承されるプロジェクトビルドを設定することを目的としていることを除いて、ほとんど同じ方法でプラグイン要素を含んでいます。ただし、これは子プロセスの plugins 要素で実際に参照されるプラグインのみを設定するものです。子プロセスはpluginManagementの定義を上書きする権利があります。

ということで、親側のpomで、プラグインの設定を pluginManagement でプラグインを設定し (たとえば javadoc と pmd)、それらを plugins 要素内で参照します (ここでは my-plugin-server でのみ)。これにより、現在の問題が解決されます。