如何在类型安全配置上解决NoSuchMethodError?

时间:2016-11-15 13:17:47

标签: scala sbt typesafe-activator typesafe-config

我在尝试运行项目时遇到此错误。

  

线程中的异常" main" java.lang.NoSuchMethodError:   com.typesafe.config.Config.getDuration(Ljava /郎/字符串;)Ljava /时间/持续时间;

尝试清除ivy2缓存但没有成功。 这就是我的构建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

任何想法如何解决?

更新: 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   支持/ IntelliJIdea2016.2 /斯卡拉/ lib目录/斯卡拉-library.jar:/用户/ AVI /库/应用程序   支持/ IntelliJIdea2016.2 / Scala / lib / scala-nailgun-runner.jar:/ Users / avi / Library / Application Support / IntelliJIdea2016.2 / Scala / lib / compiler-settings.jar:/ Users / avi / Library / Application   支持/ IntelliJIdea2016.2 /斯卡拉/ lib中/ JPS / nailgun.jar:/用户/ AVI /库/应用程序   支持/ IntelliJIdea2016.2 /斯卡拉/ lib中/ JPS / SBT-interface.jar:/用户/ AVI /库/应用程序   支持/ IntelliJIdea2016.2 /斯卡拉/ lib中/ JPS /增量compiler.jar:/用户/ AVI /库/应用程序   支持/ IntelliJIdea2016.2 / Scala / lib / jps / scala-jps-plugin.jar:/ Users / avi / Library / Application Support / IntelliJIdea2016.2 / Scala / lib / jps / dotty-interfaces.jar

2 个答案:

答案 0 :(得分:1)

这听起来像是一个类路径问题。您可能正在使用调用(使用)Typesafe Config的库,但路径中的Typesafe Config版本小于1.3.0。未找到的方法是在Typesafe Config 1.3.0中引入的。要查看运行时类路径,请确保这些语句是第一个执行的语句(即在应用程序崩溃之前):

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

一旦您看到没有Typesafe Config 1.3.0,请将其添加为显式依赖项。

答案 1 :(得分:1)

将TypeSafe 1.3.1添加为依赖项可能有所帮助,将其添加为依赖项Seq()的一部分:

s = "The text contains {} alphabetic characters of which {} ({}) are 'e'".format(totalChars, numberOfe, percent_with_e)

print(s)
The text contains 5 alphabetic characters of which 5 (100.0) are 'e'