6

次のシナリオがあります。

mylib はライブラリです (ソースがあるので、たとえば Maven プロジェクト mylib:mylib に入れたいと思います)。このライブラリには、私が jar しか持っていない jar 依存関係があり、Maven リポジトリにはありません (また、そこにインストールしたくありません)。コンパイルするには、次のようにします: jar ファイルを mylib プロジェクトの「lib」フォルダー (例: 「lib/thirdpartylib.jar」) に追加し、mylib の pom.xml に、自分で選択した group/ に依存関係を追加します。アーティファクト/バージョンと " <scope>system</scope><systemPath>${project.basedir}/lib/thirdpartylib.jar</systemPath>" エントリ。mylib プロジェクトは正常にコンパイルされます。

mylib も実行時に dll ファイル (たとえば thirdparty.dll) に依存していることに注意してください。しかし、コンパイルの場合、これは重要ではありません。

しかし、今、私は次のことを達成する方法を考えています:

プロジェクト "X" など、 mylibを使用するその他のプロジェクトには、

- mylib.jar
- thirdpartylib.jar
- thirdpartylib.dll

また、実行中の VM がサードパーティの jar と dll を検出できるように、java.library.path をディレクトリ (例: ".") に設定する必要があります。

私の懸念は次のとおりです。サードパーティの jar/dll を mylib プロジェクトに任せたいと考えています。つまり、サードパーティのjarとdllをターゲットフォルダーにコピーする必要があり、java.library.pathがそれらを参照して、mylibプロジェクトの一部になるという知識を定義したいと思います(mylib pomは、物事がどのように行われるかを知っています)他のプロジェクトで使用できます)。それでも、私はこの知識 (つまり、Maven で正確にどのように行われるかに関係なく、コピーの指示) を、たとえば X など、mylib を使用する他のプロジェクトに推移的に引き渡したいと考えています。それはどういうわけか可能ですか?

[現時点での私のハックの解決策は、X にサードパーティのもののコピーがあることですが、それでも dll ファイルをコピー/処理する方法がわからないため、dll ファイルには.実行中の VM の bin フォルダーにコピーされます)。

どんな提案でも大歓迎です!

4

1 に答える 1

2

基本的な考え方は次のとおりです。

  • Maven は、Maven POM ごとに 1 つの結果を処理するのに適しています。
  • ライブラリとこれらのライブラリへの依存関係は、ローカル リポジトリにのみ存在する可能性があります。

したがって、次の手順を実行する必要があります。

  1. 追加のライブラリに対して別のプロジェクト (またはプロジェクト内のモジュール) を定義し、結果としてライブラリを定義します。
  2. このPOMが新しいプロジェクトに依存するように、POMを変更してください。
  3. DLL に対して同じ手順を実行します ( Maven を使用した DLL 依存関係の管理の投稿を参照してください)。
  4. 追加のライブラリと DLL をローカル リポジトリにデプロイします。

これで、ビルド プロセスに再び Maven を使用できるようになりましmaven-assembly-pluginた。

于 2011-09-22T14:16:14.900 に答える