我有一个包含多个实用类的项目,我们称之为Utils
。
我有一个依赖于Utils
的proj1
。还有另一个依赖于proj1
和Utils
的proj2
。
问题是如果proj1
和proj2
都依赖于不同的Utils
版本,这将导致问题。
最好的解决方案是什么?
这种情况发生在Scala/SBT项目中,但我想其他语言也会遇到同样的问题。
编辑:
只是为了明确起见,
proj2
是将运行的项目,它使用来自proj1
和Utils
的一些代码。
我有一个包含多个实用类的项目,我们称之为Utils
。
我有一个依赖于Utils
的proj1
。还有另一个依赖于proj1
和Utils
的proj2
。
问题是如果proj1
和proj2
都依赖于不同的Utils
版本,这将导致问题。
最好的解决方案是什么?
这种情况发生在Scala/SBT项目中,但我想其他语言也会遇到同样的问题。
编辑:
只是为了明确起见,
proj2
是将运行的项目,它使用来自proj1
和Utils
的一些代码。
通过改变代码消除冲突,将多版本依赖合并为单一依赖。
阴影(如@Sean Viera所述)
多ClassLoader组件架构,如OSGI(如@tuxdna所述)
像微服务架构那样在单独的JVM中运行(也由@tuxdna提到)
你有三个不同的项目:
唯一能够 100%
确保 proj1 和 proj2 之间没有冲突的方法是将它们隔离运行。
一旦你在相同的 classpath 上混合使用不同版本的 Utils,你就会覆盖其中一个项目。
你可以通过以下方式实现隔离运行: