2016-09-25 42 views
0

我目前在Scala中構建一個需要使用Gephi Java庫的Play Framework應用程序。在Play應用程序中使用Gephi

我試着在SBT中添加Gephi作爲託管依賴項,但是SBT無法解決Gephi的所有依賴項。這是一個known issue。然後我試圖在我的lib/文件夾中添加整個Gephi JAR作爲非託管依賴項。 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$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:174) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:126) 
    at scala.Option.map(Option.scala:146) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:126) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:124) 
    at scala.util.Success.flatMap(Try.scala:231) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:124) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:116) 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(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/文件夾,但它導致相同的例外。

格芬對這個項目非常重要,所以我不能只是移動到另一個圖書館。有任何想法嗎?

+0

做'激活全新的編譯run' – pamu

+0

我已經嘗試過,但遺憾的是它沒有做任何好事:/ – francoisr

+0

問題是因爲你正在使用緩存。請參閱完整的堆棧跟蹤 – pamu

回答

1

取下罐子FOM lib,添加這些兩個額外的解析器(在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

+1

謝謝,現在構建工作正常,但由於某些原因,我不能訪問gephi-toolkit的某些類。例如''org.gephi.graph.api.GraphController''不存在,即使我可以從同一個包中訪問其他類,比如'org.gephi.graph.api.Node'' – francoisr

+0

是不是在IDE配置中存在一個問題(如果添加'org.gephi.graph.api.GraphController'的導入並編譯,它可以工作?)?如果是這樣,最好再提出一個問題,因爲這與原始問題 – Salem

+0

並無太大關係。不幸的是,即使我在CLI中使用sbt編譯IntelliJ之外,也不會編譯添加的導入。 – francoisr

相關問題