2015-12-24 66 views
0

java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering當我嘗試運行由sbt構建的jar時拋出。我對該jar進行了反編譯,發現它缺少該方法。缺少方法在由sbt構建的jar中

但是,在其他節點上,一切都很好。同一個項目和同一版本的sbt(0.13.8),不知道哪裏出錯。

更新:

libraryDependencies ++= { 
    val akkaV = "2.3.6" 
    val sprayV = "1.3.2" 
    val jacksonV = "2.4.1" 
    val kamonVersion = "0.5.2" 
    Seq(
    "org.apache.poi"     % "poi"      % "3.12" 
    , "org.apache.poi"     % "poi-ooxml"    % "3.12" 
    , "io.spray"       %% "spray-routing"   % sprayV 
    , "io.spray"       %% "spray-can"    % sprayV 
    , "io.spray"       %% "spray-client"    % sprayV 
    , "io.spray"       %% "spray-http"    % sprayV 
    , "io.spray"       %% "spray-testkit"   % sprayV     % "test" 
    , "io.spray"       %% "spray-json"    % "1.3.1" 
    , "io.spray"       %% "spray-caching"   % "1.3.1" 
    , "org.scalatest"     %% "scalatest"    % "2.2.1"     % "test" 
    , "org.reactivemongo"    %% "reactivemongo"   % "0.11.1" 
    , "com.github.nscala-time"   %% "nscala-time"    % "1.2.0" 
    , "com.typesafe.akka"    %% "akka-actor"    % akkaV 
    , "com.typesafe.akka"    %% "akka-slf4j"    % akkaV 
    , "com.typesafe.akka"    %% "akka-testkit"    % akkaV      % "test" 
    , "org.specs2"      %% "specs2-core"    % "2.4.15"     % "test" 
    , "com.gettyimages"     %% "spray-swagger"   % "0.5.0" 
    , "ch.qos.logback"     % "logback-classic"   % "1.1.2" 
    , "com.fasterxml.jackson.core"  % "jackson-core"    % jacksonV 
    , "com.fasterxml.jackson.core"  % "jackson-annotations"  % jacksonV 
    , "com.fasterxml.jackson.core"  % "jackson-databind"   % jacksonV 
    , "com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % jacksonV 
    , "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % jacksonV 
    , ("com.sksamuel.elastic4s"   %% "elastic4s-core"    % "1.6.0") 
    , "org.scala-lang.modules"   %% "scala-async"    % "0.9.3" 
    , "org.apache.velocity"    % "velocity"     % "1.7" 
    , "com.github.mauricio"    %% "mysql-async"    % "0.2.15" 
    , ("joda-time"      % "joda-time"    % "2.7") 
    , "mysql"       % "mysql-connector-java"  % "5.1.34" 
    , "org.apache.commons"    % "commons-email"   % "1.2" 
    , "commons-lang"      % "commons-lang"    % "2.6" 
    , "commons-codec"     % "commons-codec"   % "1.9" 
    , "com.typesafe.akka"    %% "akka-contrib"    % akkaV 
    , "com.typesafe.akka"    %% "akka-testkit"    % akkaV 
    , "org.mongodb"      % "mongo-java-driver"   % "3.0.1" 
    , "com.github.scullxbones"   %% "akka-persistence-mongo-rxmongo" % "0.4.0" 
    , "org.reflections"     % "reflections"    % "0.9.10" 
    ,"org.apache.kafka"     % "kafka_2.11"    % "0.8.2.0" excludeAll(ExclusionRule(organization="org.slf4j")) 
    , "com.oracle"      % "ojdbc14"     % "10.2.0.4.0" 
    ,"org.elasticsearch"     % "elasticsearch"    % "1.6.0" 
    , "io.kamon"       % "kamon-core_2.11"   % kamonVersion 
    , "io.kamon"       % "kamon-log-reporter_2.11" % kamonVersion 
    , "io.kamon"      %% "kamon-system-metrics"  % kamonVersion 
    , "org.aspectj"      % "aspectjweaver"    % "1.8.5" 
    , "io.kamon"      %% "kamon-akka"     % kamonVersion 
    , "io.kamon"      %% "kamon-spray"    % kamonVersion 
    , "io.kamon"       % "kamon-annotation_2.11"  % kamonVersion 
    ,"com.unboundid"      % "unboundid-ldapsdk"   % "3.0.0" 
) 
} 

假定工作節點A和不正常的一個是B.我刪除這兩個節點上傑克遜核心-2.1.1罐子,SBT編譯後,節點A沒有下載那個罐子,但節點B做到了。這真的很奇怪。

+0

這兩個節點有什麼不同? –

+0

您是否在另一個節點上反編譯JAR以驗證它是否在那裏? – gpgekko

+0

我確實驗證過它在裏面。 –

回答

0

這個問題終於通過迫使sbt使用jackson-2.4.1來解決。

, "com.fasterxml.jackson.core"  % "jackson-core"    % jacksonV force() 
    , "com.fasterxml.jackson.core"  % "jackson-annotations"  % jacksonV force() 
    , "com.fasterxml.jackson.core"  % "jackson-databind"   % jacksonV force() 

我打印整個項目的依賴關係樹,並找到傑克遜2.1.1沒有傳遞依賴,但不知何故,SBT包成脂肪的罐子。