使用生菜4.4与游戏框架2.5.5

时间:2017-09-22 09:21:10

标签: java playframework sbt netty lettuce

我正在尝试将play版本4.4用作Play框架2.5.5项目中的Redis客户端库。看起来与play 2.5.5和生菜4.4使用的netty版本存在一些兼容性问题。

当redis客户端尝试连接到本地安装的redis服务器时,我看到java.nio.channels.UnresolvedAddressException。我确保redis服务器运行正常。此外,我可以使用来自独立的基于maven的java项目中的生菜4.4连接到redis。

要解决这个问题,我通过明确指定netty依赖关系来重现独立maven项目中的问题,如下所示:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.0.20.Final</version>
</dependency>

我能够通过使用shaded-jar来解决maven项目中的问题,其中依赖项被重定位到com.lambdaworks包以避免版本冲突,如https://github.com/lettuce-io/lettuce-core#binariesdownload中所述。要使用带阴影的jar,将'classifier'属性添加到具有值'shaded'的生菜依赖关系定义中,并且还指定了排除列表。如何使用build.sbt实现相同的效果?

根据http://www.scala-sbt.org/0.13/docs/Library-Management.html#Exclude+Transitive+Dependencies,我可以在build.sbt中指定排除项,但不确定如何设置分类器属性。只有排除列表,它似乎不起作用。

1 个答案:

答案 0 :(得分:0)

最后,我可以通过在build.sbt中指定shaded分类器和exclusions来解决此问题,如下所示:

  "biz.paluch.redis" % "lettuce" % "4.4.0.Final" classifier "shaded" excludeAll(
    ExclusionRule(organization = "io.reactivex", artifact="rxjava"),
    ExclusionRule(organization = "org.latencyutils", artifact="LatencyUtils"),
    ExclusionRule(organization = "io.netty", artifact="netty-common"),
    ExclusionRule(organization = "io.netty", artifact="netty-transport"),
    ExclusionRule(organization = "io.netty", artifact="netty-handler"),
    ExclusionRule(organization = "io.netty", artifact="netty-codec"),
    ExclusionRule(organization = "com.google.guava", artifact="guava"),
    ExclusionRule(organization = "io.netty", artifact="netty-transport-native-epoll"),
    ExclusionRule(organization = "io.apache.commons", artifact="commons-pool2"))
)