1

プロプライエタリなハードウェア用のファット jar を含める必要があるプロジェクトがあります。質問しないでください。jar を Central または他のリポジトリに配置するのが最善であることはわかっていますが、そうではありません。:( sbt が管理されていない依存関係として扱うように、lib ディレクトリに配置する必要があります。

しかし、jar には古いバージョンの slf4j が含まれており、いつ Play! 実行すると、静的関数が見つからないというエラーがスローされます (これは、slf4j の新しいバージョンで追加されました)。

これが私が試したことです。

  • force() を使用して libraryDependency を追加しようとしました。サイコロはありません。
  • ここで見つけたいくつかの excludeAll サンプルを試しました。サイコロはありません。
  • 絶望的な気持ちから、jar を解凍し、slf4j を削除して、jar を再度作成しました。It Works! ですが、真剣に、これはプロジェクトを維持するための私の最初の選択ではありません。

sbt ベースの scala または play プロジェクトで管理されていない依存関係である Uber jar 内の何かを除外する方法を知っている人はいますか?

4

1 に答える 1

0

マネージド slf4j ライブラリを陰影付けして、依存関係の衝突がないように見せることができます。これを行うには、sbt-assemblyシェーディング機能を使用できます。

たとえば、 を使用している場合は、次slf4j-apiのようになります。

assemblyShadeRules in assembly ++= Seq(
  ShadeRule.rename("org.slf4j.slf4j-api.**" -> "my_slf4j.@1")
    .inLibrary("org.slf4j" % "slf4j-api" % "1.7.21")
    .inProject
)

これにより、この特定のバージョンの slf4j を使用するものはすべて、そのパッケージ名my_slf4jorg.slf4j.

于 2016-06-12T09:07:03.930 に答える