2016-06-11 6 views
1

私はいくつかの独自のハードウェアにファットジャーを含める必要があるプロジェクトを持っています。質問しないでください。私は、そのジャーがセントラルまたは他のレポになるのに最適ですが、そうではありません。 :(libディレクトリに入れておくと、sbtはアンマネージ依存として扱います)PlayのためにsbtのUber(脂肪)瓶から除外! Scalaで

しかし、jarファイルには古いバージョンのslf4jが含まれています.Play!が実行されると、静的関数はSLF4Jの新しいバージョンで追加された(欠けている。ここで

は、私が試したものである。

  • I)は(力を利用してlibraryDependencyを追加しようとしたんです。何サイコロは。
  • I私がここで見つけたいくつかの除外サンプルを試しました。ダイスなし
  • 私は瓶を解凍し、slf4jを取り除き、再び瓶を作りました。それは動作します!しかし、真剣にこれはプロジェクトを維持するための私の最初の選択ではありません。

誰でも、Ubarのjarファイル内の何かを、sbtベースのscalaやplayプロジェクトのアンマネージド依存関係から除外する方法を知っていますか?

答えて

0

あなたの管理下のslf4jライブラリは、依存性の矛盾がないように見えるようにします。これを行うには、sbt-assemblyシェーディング機能を使用できます。あなたがslf4j-apiを使用している場合

例えば、それは次のようになります。これは、それを変更するSLF4Jのこの特定のバージョンを使用して何かを引き起こします

assemblyShadeRules in assembly ++= Seq(
    ShadeRule.rename("org.slf4j.slf4j-api.**" -> "[email protected]") 
    .inLibrary("org.slf4j" % "slf4j-api" % "1.7.21") 
    .inProject 
) 

ではなくorg.slf4jmy_slf4j接頭辞とパッケージ名です。

+0

ありがとうございましたが、私が言及したように、新しいバージョンであるため、管理されたバージョン(どのようにも依存関係から除外することができます)が必要です。私は何とかアンマネージライブラリのバージョンを除外する必要があります。 – Reza

+0

管理バージョンはuber jarでコンパイルされていますか?そうであれば、シェーディング機能は、jarファイル内で使用されている内部ライブラリをシェードします。これはあなたが望むwjatです –

関連する問題