Maven FrameworkのトップレベルPOMをセットアップする方法
-
27-10-2019 - |
質問
AntからMavenに社内のフレームワークプロジェクトの1つを変換し終えたところです。 Mavenビルドは正常に実行され、問題なくリポジトリに展開します。
問題は、他のプロジェクトがフレームワークを消費しようとする場合、機能しないことです。ダウンロードされた唯一のものは、トップレベルのフレームワークPOMです。
さまざまなモジュールの1つ以上にいくつかの依存関係エントリを追加しようとしましたが、どちらを追加しても、円形の依存関係エラーが発生します。また、モジュールといくつかの依存関係を備えた2番目のトップレベルPOMファイルを作成して、リポジトリマネージャーのファイルを上書きしようとしました。これにより、一部の依存関係がダウンロードされますが、Mavenビルドはランダムな場所に垂れ下がっています。 Windowsタスクマネージャーに基づいて、無限のループにあるように見えます。したがって、2番目のPOMファイルは答えではないように見えます(または間違っているのです)。
私のフレームワークPOMファイルは次のようになります:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>framework_snt</groupId>
<artifactId>SFP</artifactId>
<packaging>pom</packaging>
<name>SFP framework</name>
<version>6.3</version>
<modules>
.... 50+ modules here
</modules>
そして、トップレベルPOMの通常のプロパティ、依存関係管理、プラグインマネージメントエントリ。
消費モジュールでは、次のようなものがあります。
<dependency>
<groupId>framework_snt</groupId>
<artifactId>SFP</artifactId>
<version>6.3</version>
<type>pom</type>
</dependency>
これはトップレベルのPOMであるため、すべてのサブモジュールがフレームワークライブラリにアクセスして、開発者を容易にします。
すべての依存ジャーファイルが消費プロジェクトによってダウンロードされるように、どうすればセットアップできますか?
解決
Frameworkプロジェクトは、各子供モジュール用に1つずつ、いくつかのJarアーティファクトを生成しますが、親プロジェクトにはJARアーティファクトはありません。したがって、親プロジェクトのPOMへの依存を宣言することは、あなたがやりたいことではありません。代わりに、フレームワークプロジェクトの各子モジュールへの依存を宣言する必要があります。
いくつかのモジュールを備えた「ツールキット」プロジェクト(それぞれがJARアーティファクトを生成)を備えた同様のセットアップがあります。次に、他のプロジェクトでは、使用する必要があるモジュールに対する依存関係を宣言します。ただし、「ツールキット」の親プロジェクトPOMファイルへの依存関係を宣言しません。代わりに、子供のjarアーティファクトの依存関係を宣言します。
<dependency>
<groupId>com.mycompany.toolkits</groupId>
<artifactId>file-utils</artifactId>
<version>1.0.0</version>
</dependency>
私の依存宣言は私の子供モジュールの1つを指しており、宣言していないことに注意してください <type>pom</type>
あなたがしたように。あなたが本当に明示的になりたいなら、あなたは宣言することができます <type>jar</type>
代わりは。
他のヒント
framework
あなたがそれを呼ぶようにポンはそれです parent
マルチモジュールプロジェクトのPOM。
モジュールは互いに依存することができますが、この親POMに依存することはできません。これは、おそらく円形の依存性を引き起こしているものです。
モジュールを再検討し、どのモジュールが依存関係を依存し、依存関係を適切に指定するかを特定する必要があります。また、これらの依存関係は通常です jar
依存関係 - ソースとリソースを含むパッケージ。
例によるメイベン さらに情報を提供する多くのリソースの1つです。