私は現在、大規模なマルチモジュール プロジェクト (〜 100 サブモジュール) を Maven を使用するように変換している最中です。現在、Ant + Ivy を使用しています。
これまでのところ、大きな問題は発生しておらず、Maven がまだ適切に機能していることに満足しています。ただし、ネイティブの依存関係を処理するためのより良い方法があるかどうかは疑問です。
これまでのところ、私は次の結論に達しました。
- 各ネイティブ依存関係を、スタンドアロン ライブラリまたは複数の依存関係を含むアーカイブ パッケージとして Maven リポジトリにインストールすることをお勧めします。
Maven 依存関係プラグインを使用してすべての依存関係を宣言することに迷うのではなく、それぞれに分類子 (natives-win32 など) を指定し、親 POM で次を使用することにしました。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>copy</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <includeScope>runtime</includeScope> <includeClassifiers>natives-win32</includeClassifiers> <outputDirectory>${project.build.directory}/natives</outputDirectory> </configuration> </execution> </executions> </plugin>
これまでのところ、これは、新しいネイティブの依存関係を追加するためにあまり手を加える必要のない単純な万能ソリューションのようです。また、ネイティブを管理するためのシンプルなオールラウンド ソリューションも提供してくれます。私がしなければならない唯一のことは、/natives/ ディレクトリが java.library.path で定義されていることを確認することです。
このアプローチについて私が(少し)気になることの1つは、すべてのネイティブ依存関係が、推移的な依存関係を表現する各サブモジュールにコピーされ、幸せなjarライブラリが、それらが置かれている場所を参照するクラスパスに追加されることです。私のローカル リポジトリ (コピーは必要ありません)。
これについてより賢く、ネイティブをリポジトリの場所から参照させる方法はありませんか(アーカイブされていない、つまりdllを持っていないと仮定します)。これにより、不要なコピーの束を節約できます。
上記のアプローチで心配する必要がある他の潜在的な落とし穴はありますか?