【问题标题】:Should sbt-assembly perform a "maven-shade-plugin"-like relocation of classes?sbt-assembly 是否应该执行类似“maven-shade-plugin”的类重定位?
【发布时间】:2015-05-04 23:09:52
【问题描述】:

sbt-assembly 合并策略的描述称为 rename 听起来它可能允许类似于 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)
    }
  }
}

【问题讨论】:

  • 我看到这部分的答案是 here sbt-assembly 不会遮蔽。哪一部分留下“它是否合适”?
  • 这有用吗??我也是这种情况……
  • @acidghost :不,根据我的链接,sbt-assembly 不会进行这种转换。您只需要使用 sbt excludes 来解决问题,它们非常依赖于当前的依赖 jar 集。
  • sbt 现在支持阴影 in sbt#master via this PR

标签: sbt sbt-assembly


【解决方案1】:

2015 年 9 月更新

sbt-assembly 0.14.0 添加了shading 支持。

sbt-assembly 可以隐藏项目或库依赖项中的类。在 Jar Jar Links 的支持下,字节码转换(通过 ASM)用于更改对重命名类的引用。

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inAll
)

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 2019-08-14
    • 2013-02-19
    • 2012-03-25
    • 2013-11-28
    • 2017-08-29
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多