2

サービス用の uber jar を作成するというアイデアで遊んでいますが、競合する依存関係を持つ jar を含めることについて心配しています。jar A が slf4j-1.0 に依存し、jar B が slf4j-2.0 に依存し、1.0 と 2.0 の間に大きな変更があった場合はどうなりますか? これらの jar が両方とも uber jar に含まれる場合、名前空間ごとに特定のフィルターを作成する必要がありますか、または jar を名前空間化するシャドウ プロセス中に何かが発生しますか?

助けてくれてありがとう

4

1 に答える 1

1

あなたが心配するのは正しいです。最終的に衝突が発生し (同僚はこれを「dll 地獄の繰り返し」と呼びました)、jarfile の同じディレクトリに v1 と v2 の両方のクラスが含まれることがあります。

どちらか一方のバージョンを簡単に除外できますが、依存関係で両方が必要な場合は、次のオプションに直面します。

  • 競合のない新しい依存関係を見つける
  • 現在の依存関係をアップグレードまたはダウングレードして、バージョンを揃える
  • クラスパスを含むマニフェストを含む通常のjarファイルを含む、warファイルまたはこれをより適切に処理する他のタイプのファイルとして出荷します
  • シェーディングとは異なる戦略を使用するスプリング ブートを検討してください: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#executable-jar

何をするにしても、gradle の依存関係は役に立ちます。

于 2015-04-07T17:07:49.533 に答える