在 Play 应用程序中使用 Gephi

Using Gephi inside a Play Application

我目前正在用 Scala 构建一个 Play Framework 应用程序,它需要使用 Gephi Java 库。

我尝试将 Gephi 添加为 SBT 中的托管依赖项,但 SBT 无法解析 Gephi 的所有依赖项。这是一个known issue。然后,我只是尝试将整个 Gephi JAR 作为非托管依赖项添加到我的 lib/ 文件夹中。 IntelliJ 可以很好地检测到库,我可以完美地编译我的应用程序。问题是应用一启动就出现异常,貌似跟依赖注入有关:

    play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;]
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get$$anonfun$apply$$anonfun.apply(DevServerStart.scala:174)
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get$$anonfun$apply$$anonfun.apply(DevServerStart.scala:126)
    at scala.Option.map(Option.scala:146)
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get$$anonfun$apply.apply(DevServerStart.scala:126)
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get$$anonfun$apply.apply(DevServerStart.scala:124)
    at scala.util.Success.flatMap(Try.scala:231)
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get.apply(DevServerStart.scala:124)
    at play.core.server.DevServerStart$$anonfun$mainDev$$anon$$anonfun$get.apply(DevServerStart.scala:116)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    at com.google.common.cache.CacheBuilder.getKeyStrength(CacheBuilder.java:529)
    at com.google.common.cache.LocalCache.<init>(LocalCache.java:242)
    at com.google.common.cache.LocalCache$LocalManualCache.<init>(LocalCache.java:4718)
    at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:807)
    at com.google.inject.internal.WeakKeySet.<init>(WeakKeySet.java:55)
    at com.google.inject.internal.InheritingState.<init>(InheritingState.java:67)
    at com.google.inject.internal.InjectorShell$Builder.getState(InjectorShell.java:209)
    at com.google.inject.internal.InjectorShell$Builder.lock(InjectorShell.java:115)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
    at com.google.inject.Guice.createInjector(Guice.java:96)

我尝试删除代码中所有提及 Gephi 的内容,同时仍然将 JAR 放在我的 lib/ 文件夹中,但它会导致相同的异常。

Gephi 对这个项目来说真的很重要,所以我不能直接转到另一个库。有什么想法吗?

lib 中删除该 jar,添加这两个额外的解析器(在 build.sbt 中)

resolvers += "NetBeans" at "http://bits.netbeans.org/nexus/content/groups/netbeans/"

resolvers += "gephi" at "https://raw.github.com/gephi/gephi/mvn-thirdparty-repo/"

和运行activator update