Использование Gephi внутри приложения Play

В настоящее время я создаю приложение Play Framework на Scala, для которого требуется использование библиотеки Gephi Java.

Я попытался добавить Gephi в качестве управляемой зависимости в SBT, но SBT не может разрешить все зависимости Gephi. Это известная проблема. Затем я просто попытался добавить весь 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$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/, но это приводит к тому же исключению.

Gephi действительно важен для этого проекта, поэтому я не могу просто перейти к другой библиотеке. Есть идеи?


person francoisr    schedule 25.09.2016    source источник
comment
Я уже пробовал это, но, к сожалению, это не помогло :/   -  person francoisr    schedule 25.09.2016
comment
Проблема в том, что вы используете кэш-память. См. полную трассировку стека.   -  person pamu    schedule 25.09.2016
comment
Проблема также возникает, если я использую минимальное игровое приложение без ссылки на какую-либо часть Gephi в коде. Есть ли кеш sbt кроме того, что чистится активатором clean.   -  person francoisr    schedule 25.09.2016
comment
Также удалите код Gephi из lib, а затем попробуйте скомпилировать   -  person pamu    schedule 25.09.2016


Ответы (1)


Удалите эту банку из 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

person Salem    schedule 25.09.2016
comment
Спасибо, теперь сборка работает нормально, но у меня почему-то нет доступа к некоторым классам для gephi-toolkit. Например, org.gephi.graph.api.GraphController не существует, хотя я могу получить доступ к другим классам из того же пакета, например org.gephi.graph.api.Node - person francoisr; 26.09.2016
comment
Разве это не проблема в конфигурации IDE (если вы добавите импорт org.gephi.graph.api.GraphController и скомпилируете, это сработает?)? Если это так, вероятно, лучше задать другой вопрос, поскольку он не имеет большого отношения к исходной проблеме. - person Salem; 26.09.2016
comment
К сожалению, нет, он не компилируется с добавленным импортом, даже когда я компилирую вне IntelliJ, используя sbt в CLI. - person francoisr; 27.09.2016
comment
Я открыл новый вопрос, чтобы решить мою проблему, и я Я закрываю этот вопрос, так как вашего ответа было достаточно, чтобы решить проблему сборки. Спасибо! - person francoisr; 28.09.2016