如何解决使用不同版本库的模块之间的依赖关系?

How to resolve dependencies across modules that use different versions of a library?

我正在尝试将 spark 模块添加到我的 java gradle 项目中,但是,我正在使用 io.netty:netty-all:5.0.0.Alpha1 和spark 1.5.2 使用 io.netty:netty-all:4.0.33.Final,不幸的是,由于 PooledByteBufAllocator 的构造函数,alpha 版本不向后兼容。

Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.<init>(ZIIIIIII)V
at org.apache.spark.network.util.NettyUtils.createPooledByteBufAllocator(NettyUtils.java:122)
at org.apache.spark.network.client.TransportClientFactory.<init>(TransportClientFactory.java:105)
at org.apache.spark.network.TransportContext.createClientFactory(TransportContext.java:78)
at org.apache.spark.network.netty.NettyBlockTransferService.init(NettyBlockTransferService.scala:61)
at org.apache.spark.storage.BlockManager.initialize(BlockManager.scala:187)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:528)

我的一个选择是 fork spark 以使用另一个构造函数,并希望 alpha 版本能够工作。另一种方法是以某种方式强制传递依赖项解析单个模块(spark 模块),但我不清楚如何实现它。

非常感谢任何建议。

我唯一想到的就是OSGI。那就是说你最好不要使用 netty 的 alpha 版本并坚持使用稳定的分支。