5

renameと呼ばれるsbt-assemblyマージ戦略の説明は、互換性のないバージョンのライブラリの管理を可能にするためにクラスとその参照を再配置するmaven-shade-pluginのシェーディング操作に似たものを許可するように聞こえました。

sbt-assembly がその機能を実行するのは適切でしょうか?

次のマージ戦略を使用して、名前変更を再配置メカニズムとして使用しようとしましたが、すべてのファイルに一致する一方で、それらをそのまま渡します (これは、コードを見ることと一致しています)。

assemblyMergeStrategy in assembly := { s =>
  s match {
    case PathList("com", "clearspring", "analytics", _*) => {
      println("match_cs: " + s)
      MergeStrategy.rename
    }
    case x => {
       println("x: " + x)
       val oldStrategy = (assemblyMergeStrategy in assembly).value
       oldStrategy(x)
    }
  }
}
4

1 に答える 1

7

2015 年 9 月に更新:

sbt-assembly 0.14.0 は、シェーディングサポートを追加します。

sbt-assembly は、プロジェクトまたはライブラリの依存関係からクラスをシェーディングできます。Jar Jar Links に支えられたバイトコード変換 (ASM 経由) を使用して、名前が変更されたクラスへの参照を変更します。

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inAll
)
于 2015-06-20T05:17:25.990 に答える