1

私のマルチモジュール プロジェクトには 10 個のモジュールが含まれており、そのうち 3 個にはサードパーティの jni が必要です。3 人は、テスト実行のために jni アーティファクトを解凍し、その場所を LD_LIBRARY_PATH に追加する必要があります。

この状況を処理するためのエレガントな方法は何ですか?

  • 依存関係を追加し、maven-dependency-plugin 実行の確実なプロパティを介して 3 つのモジュールに展開します (dont-repeat-yourself 原則に違反し、スケーリングしません)。
  • これらの手順で中央 pom のプロファイルを使用し、needsFooJni プロパティでアクティブ化します (プロファイルはモジュールごとではなく、プラットフォームまたはその他のビルド全体のニーズに使用する必要があります)。
  • トップレベルの pom のプロパティによって制御される実行を使用します (少し壊れやすいようです)。

それで、この種の状況を処理するためのエレガントなmavenの方法は何ですか。そのため、私のネイティブの依存関係はテスト段階で使用されます。

ありがとう

ピーター

4

3 に答える 3

2

以下のような構造を作成/変更することをお勧めします。

 root (pom.xml)
  +--- mod1 (pom.xml)
  +--- mod2 (pom.xml)
  .
  .
  +--- mod7 (pom.xml)
  +--- modX (pom.xml)
         +--- mod-jndi1 (pom.xml)
         +--- mod-jndi2 (pom.xml)
         +--- mod-jndi3 (pom.xml)

ルート (pom.xml) では、プロジェクト全体 (dependencyManagement、pluginManagement) などに共通のものを定義できます。

modX (pom.xml) では、特別な依存関係、mod-jndi1...3 モジュールにのみ使用される pluginManagmenet パーツ、および既に述べたように確実なテストの構成を定義できます。

于 2012-07-31T07:42:39.910 に答える
1

<dependencyManagement>親 pom のセクション内およびプラグイン内で依存関係を定義し、<pluginManagement>それを必要とする 3 つのモジュールでのみそれらを使用するのはどうですか?

于 2012-07-30T17:09:56.240 に答える
1

私はこの解決策を選びました:

  • デフォルトの JNI ロケーションの最上位プロパティを追加します。以下の例では、追加のリソースを見つけるために特定の構造を必要とする JNI の「特別な」ケースも追加しました。`${project.basedir}/target/extracted ${project.basedir}/target/cache/special ${extractedJniCache}${path.separator}${specialExceptionLibrayCache}'

  • 抽出を制御するプロパティを追加する

    <skipSpecialJNIExtraction>true<skipSpecialJNIExtraction> <skipFooBarJNIExtraction>true<skipFooBarJNIExtraction>

  • スキップ プロパティによって制御される依存関係抽出の実行を定義します (デフォルトはスキップで、個々のモジュールはオーバーライドできます)。

  • 私の確実な構成では、パスとldライブラリパスを定義します <environmentVariables> <PATH>${env.PATH}${path.separator}${ldLibraryAddon}</PATH> <LD_LIBRARY_PATH>${ldLibraryAddon}</LD_LIBRARY_PATH> `

デフォルトでは、すべてのテストで JNI のディレクトリがテスト実行用の PATH/LD_LIBRARY_PATH に追加されます。これらのディレクトリは、モジュールがスキップ プロパティをオーバーライドする場合にのみ存在します。

私が望むほどエレガントではありませんが、マスター pom に集中して複雑さを 1 か所に保ち、モジュール pom を小さく保ちます。

于 2012-07-31T14:02:50.660 に答える