The description of sbt-assembly merge strategy called rename sounded like it might permit something similar to the shading operation of the maven-shade-plugin which will relocate classes and their references to permit the management of incompatible versions of libraries.
Would it be appropriate for sbt-assembly to perform that function?
I used the following merge strategy to attempt to use rename as a relocation mechanism but while it matches all the files, it passes them straight through (which is consistent with looking at the code).
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)
}
}
}
Updated in September 2015:
sbt-assembly 0.14.0 adds shading support.
sbt-assembly can shade classes from your projects or from the library dependencies. Backed by Jar Jar Links, bytecode transformation (via ASM) is used to change references to the renamed classes.
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inAll
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With