I have a project with several utility classes. Let's name it Utils
.
I have a proj1
which depends on Utils
. And another proj2
that depends on proj1
and Utils
.
The problem is if both proj1
and proj2
depend on different Utils
version this will lead to problems.
What's the best solution?
This situation occurs in Scala/SBT projects, but I guess other languages have the same problems.
Edit:
Just to be clear,
proj2
is the project that will run, that uses some code fromproj1
andUtils
.
This is classic Jar Hell, and it is a problem on any JVM based project not just scala with sbt.
There are 4 common solutions
Get rid of conflict by changing code, consolidate your multiple version dependency into a single dependency.
Shading (as mentioned above by @Sean Viera)
Multiple ClassLoader component architecture like OSGI (as mentioned by @tuxdna)
Run in separate JVMs like a microservice architecture (also mentioned by @tuxdna)