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 回答