6

私は現在、大規模なマルチモジュール プロジェクト (〜 100 サブモジュール) を Maven を使用するように変換している最中です。現在、Ant + Ivy を使用しています。

これまでのところ、大きな問題は発生しておらず、Maven がまだ適切に機能していることに満足しています。ただし、ネイティブの依存関係を処理するためのより良い方法があるかどうかは疑問です。

これまでのところ、私は次の結論に達しました。

  1. 各ネイティブ依存関係を、スタンドアロン ライブラリまたは複数の依存関係を含むアーカイブ パッケージとして Maven リポジトリにインストールすることをお勧めします。
  2. 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を持っていないと仮定します)。これにより、不要なコピーの束を節約できます。

上記のアプローチで心配する必要がある他の潜在的な落とし穴はありますか?

4

3 に答える 3

0

たぶん、私はそれを手に入れませんでした。しかし、最初にすべてのネイティブライブラリをリポジトリにデプロイしてみませんか。ネイティブライブラリが安定していてほとんど変更されない場合は、別のリアクターで実行できます。

その後、他の依存関係と同様に、GAVを介してこれらのネイティブ依存関係を参照します。また、不要なコピーの問題もこれで解決します。

于 2012-09-25T05:47:23.793 に答える
0

スニペットは、依存関係ではなく、ビルド フェーズに関連付けられた目標を示しています。スーパーpomの「依存関係のコピー」の目標はすべてのモジュールに継承されていますか? アプリとして実行/パッケージ化されるモジュールにのみ移動する方法はありませんか?

于 2012-04-23T17:16:17.580 に答える
0

結局、maven ネイティブ プラグインを使用して、その場所にネイティブ ライブラリの冗長なコピーがあるという事実に対処しました。この理由は主に、プラグインが提供する単純さと、開発者の Eclipse 環境で介入なしでネイティブをセットアップする関連する Eclipse プラグインもあるという事実によるものでした。

于 2012-10-08T13:44:12.700 に答える