在sbt建立的jar中缺少方法

时间:2015-12-24 05:14:39

标签: java sbt

当我尝试运行由sbt构建的jar时,会抛出

java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering。我反编译了那个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.我在两个节点上删除了jackson-core-2.1.1 jar,在sbt编译之后,节点A没有下载那个jar但是节点B没有。这真的很奇怪。

1 个答案:

答案 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()

我打印了整个项目的依赖树,发现没有对jackson 2.1.1的传递依赖,但不知何故sbt将它打包到fat-jar中。