Apache Ignite - 旧的番石榴依赖冲突

时间:2018-03-07 14:50:05

标签: sbt

我收到以下错误:

[error] ignite - Got exception while starting (will rollback startup routine).
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService;
    at org.apache.curator.framework.listen.ListenerContainer.addListener(ListenerContainer.java:40)
    at org.apache.curator.framework.imps.CuratorFrameworkImpl.start(CuratorFrameworkImpl.java:256)
    at org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder.init(TcpDiscoveryZookeeperIpFinder.java:147)
    at org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder.registerAddresses(TcpDiscoveryZookeeperIpFinder.java:206)
    at org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter.initializeLocalAddresses(TcpDiscoveryIpFinderAdapter.java:61)
    at org.apache.ignite.spi.discovery.tcp.TcpDiscoveryImpl.registerLocalNodeAddress(TcpDiscoveryImpl.java:317)
    at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStart(ServerImpl.java:343)
    at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStart(TcpDiscoverySpi.java:1846)
    at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:297)
    at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:882)

该项目使用Play Framework,它依赖于Guava 22.0和Apache Ignite,但最新的Apache Ignite版本依赖于Guava 16.0。我正在使用SBT,因此Guava 16.0正在被逐出而支持Guava 22.0。我想知道,是否有另一种解决依赖冲突的方法,以便Ignite使用Guava 16.0,而项目的其余部分使用Guava 22.0。

我目前的想法是将Apache Ignite分离为一个单独的子模块,并将use sbt-assembly to shade the guava 16依赖分隔为一个非托管jar。

2 个答案:

答案 0 :(得分:1)

在对jar进行着色之前

,尝试强制guava版本为16.0,并查看play是否与该版本兼容。

要强制使用特定版本,请添加到build.sbt

dependencyOverrides += "com.google.guava" % "guava" % "16.0"

答案 1 :(得分:0)

答案是在主要项目中创建一个新的子项目,在那里存储Apache Ignite依赖项。子项目必须组装到带有阴影Guava依赖项的jar文件。最后,在主项目上说它依赖于先前创建的jar文件。