2016-11-15 9 views
0

Я получаю эту ошибку при попытке запустить мой проект.как разрешить NoSuchMethodError на config config?

Exception in thread "main" java.lang.NoSuchMethodError: com.typesafe.config.Config.getDuration(Ljava/lang/String;)Ljava/time/Duration;

пытался очистить кэш плюща без успеха. это как моя сборка SBT выглядит следующим образом:

scalaVersion := "2.11.7" 
scalacOptions := Seq("-unchecked", "-feature", "-deprecation", "-encoding", "utf8") 

resolvers ++= Seq(
    Resolver.sonatypeRepo("releases"), 
    Resolver.sonatypeRepo("snapshots"), 
    Resolver.bintrayRepo("websudos", "oss-releases"), 
    "spray repo"      at "http://repo.spray.io", 
    "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/", 
    "Typesafe repository releases"  at "http://repo.typesafe.com/typesafe/releases/", 
    "Sonatype repo"     at "https://oss.sonatype.org/content/groups/scala-tools/", 
    "Sonatype releases"    at "https://oss.sonatype.org/content/repositories/releases", 
    "Sonatype snapshots"    at "https://oss.sonatype.org/content/repositories/snapshots", 
    "Sonatype staging"     at "http://oss.sonatype.org/content/repositories/staging", 
    "Sonatype"       at "https://oss.sonatype.org/content/groups/public/", 
    "Java.net Maven2 Repository"  at "http://download.java.net/maven/2/", 
    "Twitter Repository"    at "http://maven.twttr.com" 
) 

libraryDependencies ++= { 
    val phantomV   = "1.29.5" 
    val scalaTestV  = "3.0.0" 
    val elastic4sV  = "2.4.0" 
    val akkaStreamVersion = "2.4.2" 
    val akkaVersion = "2.3.11" 
    Seq(
    "com.websudos"   %% "phantom-dsl"      % phantomV, 
    "com.websudos"   %% "phantom-reactivestreams"   % phantomV, 
    "com.websudos"   %% "util-testing"      % "0.13.0" % "test, provided", 
    "com.typesafe.akka"  %% "akka-actor"       % akkaVersion, 
    "com.typesafe.akka"  %% "akka-http-spray-json-experimental" % akkaStreamVersion, 
    "com.typesafe.akka"  %% "akka-http-core"     % akkaStreamVersion, 
    "com.typesafe.akka"  %% "akka-http-experimental"    % akkaStreamVersion, 
    "com.typesafe.akka"  %% "akka-http-testkit"     % akkaStreamVersion, 
    "org.scalatest"   %% "scalatest"       % scalaTestV % "test", 
    "com.typesafe.akka"  %% "akka-testkit"      % akkaVersion % "test", 
    "com.typesafe.play"  %% "play-streams-experimental"   % "2.4.6", 
    "com.sksamuel.elastic4s" %% "elastic4s-core"      % elastic4sV, 
    "com.sksamuel.elastic4s" %% "elastic4s-streams"     % elastic4sV 
) 
} 
lazy val root = project.in(file(".")).configs(IntegrationTest) 
Defaults.itSettings 

initialCommands := """|import akka.actor._ 
         |import akka.pattern._ 
         |import akka.util._ 
         |import scala.concurrent._ 
         |import scala.concurrent.duration._""".stripMargin 
fork in run := true 

любая идея, как решить эту проблему?

UPDATE: java.class.path показывает

/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/tools.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jps-builders.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/trove4j.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/scala-library.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/scala-nailgun-runner.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/compiler-settings.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/jps/nailgun.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/jps/sbt-interface.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/jps/incremental-compiler.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/jps/scala-jps-plugin.jar:/Users/avi/Library/Application Support/IntelliJIdea2016.2/Scala/lib/jps/dotty-interfaces.jar

+0

Вы также можете разделить строку кода, который содержит этот 'getDuration' вызов. – mfirry

+0

@mfirry Нет такой строки, т. Е. Где в коде я вызываю этот метод явно. однако другие библиотеки могут быть вызваны такими, как scalatest/akka и т. д. – igx

+0

Мне было бы интересно увидеть больше информации/типы файлов конфигурации/это полный файл сборки? – Barry

ответ

1

Это звучит как проблема CLASSPATH. Возможно, вы используете библиотеку, которая вызывает (использует) Configafe Config, но версия Configafe Config на вашем пути меньше 1.3.0. Метод, который не найден, был введен в Configafe Config 1.3.0. Чтобы увидеть во время выполнения классов, убедитесь, что эти заявления являются первым, которые выполняются (т.е. до ваших аварий приложений):

val cp = System.getProperty("java.class.path") 
val sep = System.getProperty("path.separator") 
cp.split(sep).foreach(println) 

После того, как вы видите, что у вас нет типизированного Config 1.3.0, добавьте его в качестве явная зависимость.

+0

Добавив, что явная зависимость решала эту проблему - спасибо! – igx

+0

Знаете ли вы, как я могу исправить это в репозитории плюща? – igx

+0

Если вы добавили его в свои зависимости, ваша система сборки (sbt?) Должна загрузить его в репозиторий Ivy. (Например, sbt использует Ivy для разрешения зависимостей.) Разве это не произошло? – radumanolescu

1

Добавление типизированного 1.3.1 в зависимости может помочь, добавить его как часть вашего послед() зависимостей:

"com.typesafe" % "config" % "1.3.1"