Our project mainly consists of two parts
unmanagedJars
setting. The question is how to assembly the shaded project before compiling the root project. Otherwise, the root project will fail to compile since those classes in the shaded jars are not available.
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:
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