2017-11-10 11 views
10

私は、次のような状況があります。今TreatsLibraryがあるため、法的な理由により、バージョン2.0で削除されましたIceCream.giveToKidAfterDrill()を使用しているので、私はVerifyErrorを得る2つのライブラリは、同じ依存関係の異なるバージョンを持っています。両方をインポートするには?

+ DentistApp 
    L TreatsLibrary 
    L IceCream 1.0 
    L CavityCausesLib 
    L IceCream 2.0 

を。

どのように両方のバージョンをインポートし、それぞれが独自のものを使用していることを確認しますか?

+2

これは、1つのClassLoaderで1つのClassLoaderを使用するだけでは実行できません。クラスの1つのバージョンしか存在できません。 独自のクラス・ローディング・メカニズムを実装しない場合は、OSGiを参照してください。 –

+0

はい、それはできます、私はちょうど覚えていない、それはライブラリの名前を変更することと関係していた – gurghet

+0

あなたはsbtアセンブリでこれをタグ付けしました。これはuber JARを使用してライブラリをパッケージ化する場合に役立ちます。 –

答えて

4

この回答は、実行時にパッケージ化されたuber JARからこれらのライブラリをロードする方法について話していることを前提としています。

sbt-assemblyを使用して依存関係を陰影付けする必要があります。この意志シェードIceCream依存性は、あなたのcom.library.treats

assemblyShadeRules in assembly ++= Seq(
    ShadeRule.rename("IceCream.**" -> "[email protected]") 
    .inLibrary("com.library.treats" % "TreatsLibrary" % "1.0.0") 
    .inProject 
) 

my_icecreamで開始するすべてのパッケージ名を変更します。 これは以下のように行うことができます。

+0

これらはプロジェクトで依存関係の中でのみ使用されていません – gurghet

+0

@gurghet私の答えと何が関係しているのか分かりません。これは、あなたが書いたものであっても、第三者によってパッケージ化されたものであっても、依存関係を陰にします。 –

+0

インプロジェクトは何をしていますか? – gurghet

関連する問題