在胖罐

时间:2017-12-21 06:52:26

标签: java xml scala sbt-assembly

我想在我的项目中使用scala-xml jar,我对胖罐有以下配置。

a previous project 中,我可以使用 XML locally 版本:

lazy val scalaXml = "org.scala-lang" % "scala-xml" % "2.11.0-M4"

但是当我尝试将这个版本与我的胖jar一起使用时,我从部署的jar中得到错误(但是,我的测试仍在我的本地计算机上正常运行):

scala/Product$class: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: scala/Product$class
at scala.xml.NamespaceBinding.<init>(NamespaceBinding.scala:23)
at scala.xml.TopScope$.<init>(TopScope.scala:17)
at scala.xml.TopScope$.<clinit>(TopScope.scala)
at example.models.soap11.SoapEnvelope$.toXML(SoapEnvelope.scala:9)
at example.AWSLambdaRequestHandler.execute(RequestHandler.scala:73)

scala-xml 相关

lazy val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.6"

错误(TL; DR)

org.scala-lang#scala-library;2.12: not found
[warn]  :: org.scala-lang#scala-reflect;2.12: not found
[warn]  :: org.scala-lang#scala-compiler;2.12: not found

我已经完成了 issue ,其中推荐的解决方案是 sbt update ,但这并没有解决我的问题。相反,它导致上面的错误消息。

here 项目的 build.sbt 文件似乎在使用

libraryDependencies += ("org.scala-lang" % "scala-compiler" % scalaVersion.value % "test").exclude("org.scala-lang.modules", s"scala-xml_${scalaVersion.value}")

作为测试依赖项。还有其他2个版本:

version := "1.1.0-SNAPSHOT",
mimaPreviousVersion := Some("1.0.6"),

我也尝试了以下配置:

lazy val scalaXml = "org.scala-lang.modules" % "scala-xml_2.12" % "1.0.6"
lazy val scalaXml = "org.scala-lang.modules" %% "scala-xml_2.12" % "1.0.6"
lazy val scalaXml = "org.scala-lang" %% "scala-xml" % "1.0.6"

详细配置和错误消息:

build.sbt(整个文件)

import sbt.Keys.{libraryDependencies, _}
import sbt._

val lambdaVersion = "1.2.0"
val awsVersion = "1.11.22"

val json4sVersion = "3.6.0-M2"
val sttpVersion = "1.1.1"

lazy val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.6"

lazy val sttp = Seq(
  "com.softwaremill.sttp" %% "core",
  "com.softwaremill.sttp" %% "json4s"
).map(_ % sttpVersion)

lazy val json4s = Seq(
  "org.json4s" %% "json4s-native",
  "org.json4s" %% "json4s-ext"
).map(_ % json4sVersion)

lazy val awsLambda = Seq(
  "com.amazonaws" % "aws-lambda-java-events",
  "com.amazonaws" % "aws-lambda-java-core"
).map(_ % lambdaVersion)

lazy val aws = Seq(
  "com.amazonaws" % "aws-java-sdk-core",
  "com.amazonaws" % "aws-java-sdk-s3"
).map (_ % awsVersion)


javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint")

lazy val root = (project in file(".")).
  settings(
    inThisBuild(List(
      organization := "example",
      scalaVersion := "2.12",
      version      := "0.1.0-SNAPSHOT",
      retrieveManaged := true
    )),
    name := "aws-scala-lambda-test",
    libraryDependencies += scalaXml,
    libraryDependencies ++= json4s,
    libraryDependencies ++= awsLambda,
    libraryDependencies ++= aws,
    libraryDependencies ++= sttp,
    libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.3" % Test,
    libraryDependencies += "org.mockito" % "mockito-all" % "1.10.19" % Test
)

assemblyJarName in assembly := "my-example.jar"
assemblyMergeStrategy in assembly := {
  case PathList("META-INF", _ @ _*) => MergeStrategy.discard
  case _ => MergeStrategy.first
}

错误

$ sbt
> update
[info] Resolving org.scala-lang#scala-reflect;2.12 ...
[info] Resolving org.scala-lang#scala-reflect;2.12 ...
[warn]  module not found: org.scala-lang#scala-reflect;2.12
[warn] ==== local: tried
[warn]   /Users/localuser/.ivy2/local/org.scala-lang/scala-reflect/2.12/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12/scala-reflect-2.12.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/localuser/.sbt/preloaded/org.scala-lang/scala-reflect/2.12/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////Users/localuser/.sbt/preloaded/org/scala-lang/scala-reflect/2.12/scala-reflect-2.12.pom
[info] Resolving org.scala-lang.modules#scala-parser-combinators_2.12;1.0.4 ...
[info] Resolving org.mockito#mockito-all;1.10.19 ...
[info] Resolving org.scala-lang#scala-compiler;2.12 ...
[info] Resolving org.scala-lang#scala-compiler;2.12 ...
[warn]  module not found: org.scala-lang#scala-compiler;2.12
[warn] ==== local: tried
[warn]   /Users/localuser/.ivy2/local/org.scala-lang/scala-compiler/2.12/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12/scala-compiler-2.12.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/localuser/.sbt/preloaded/org.scala-lang/scala-compiler/2.12/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////Users/localuser/.sbt/preloaded/org/scala-lang/scala-compiler/2.12/scala-compiler-2.12.pom
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scala-lang#scala-library;2.12: not found
[warn]  :: org.scala-lang#scala-reflect;2.12: not found
[warn]  :: org.scala-lang#scala-compiler;2.12: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]

0 个答案:

没有答案