As I said in the comments, I would take a different route. If you take on the dependencies as managed dependencies, you can shade them both in the library itself and inside your project.
Let's see an example:
Assume that I have a project which takes dependency on com.typesafe.config
. I can shade it inside it's own library, meaning inside the code of com.typesafe.config
, and also in the consuming library.
You define it like this:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.0")
.inProject
)
Which basically means "take any package that beings with com.typesafe.config
and shade it to my_conf
."
Note that we're using both inLibrary
and inProject
. The former means "change the package names and references to them inside com.typesafe.config
" and inProject
means "change all references to com.typesafe.config
inside my code".
Now, the output of that looks like this:
This is how the package internally looks now (my_conf
was originally com.typesafe.config
before shading):
And this is the package your code will reference:
Build.scala
root? – MccullochinLibrary
andinProject
, it will shed the internal dependencies as well. – Mcculloch