我正在尝试将 parboiled2 作为依赖项添加到我的项目中,并按照计算器示例进行操作,但它与喷雾冲突。
我当前的build.sbt
文件包括:
"io.spray" %% "spray-json" % "1.3.1" withSources() withJavadoc(),
"io.spray" %% "spray-can" % sprayV withSources() withJavadoc(),
"io.spray" %% "spray-routing" % sprayV withSources() withJavadoc(),
"io.spray" %% "spray-testkit" % sprayV % "test" withSources() withJavadoc(),
当我添加
"org.parboiled" %% "parboiled" % "2.0.1" withSources() withJavadoc(),
我明白了
[error] Modules were resolved with conflicting cross-version suffixes in {file:/blar/blar}blar-blar:
[error] com.chuusai:shapeless _2.10.4, _2.10
[error] org.scalamacros:quasiquotes _2.10, _2.10.3
java.lang.RuntimeException: Conflicting cross-version suffixes in: com.chuusai:shapeless, org.scalamacros:quasiquotes
一些谷歌搜索也是如此,并且像往常一样,人们建议使用exclude
SBT 的指令(我认为这在逻辑上没有意义,因为它不可避免地会导致像ClassNotFoundException
and之类的问题NoSuchMethodError
)。尽管如此,我还是尝试了:
"org.parboiled" %% "parboiled" % "2.0.1" withSources() withJavadoc()
exclude("com.chuusai", "shapeless_2.10.4") exclude("org.scalamacros", "quasiquotes_2.10")
assembly
当我尝试跑步时,我得到了惊喜
[error] java.lang.ClassNotFoundException: scala.quasiquotes.QuasiquoteCompat$
我还收到更多错误:
[error] bad symbolic reference
. A signature in RuleDSLBasics.class refers to term internal
[error] in package scala.reflect which is not available.
[error] It may be completely missing from the current classpath, or the version on
[error] the classpath might be incompatible with the version used when compiling RuleDSLBasics.class.
[error] error while loading RuleDSLBasics, Missing dependency 'bad symbolic reference. A signature in RuleDSLBasics.class refers to term annotations
[error] in value scala.reflect.internal which is not available.
[error] It may be completely missing from the current classpath, or the version on
[error] the classpath might be incompatible with the version used when compiling RuleDSLBasics.class.', required by ...
如果我注释掉 Spray 依赖项(和代码),我可以使用 Calculator 示例成功组装一个 jar。
对于我使用 parboiled2 来说,这是一个主要的表演障碍。exclude
除了指令之外还有其他方法可以使这些东西起作用吗?有没有人有一个可以使用 Spray 和 parboiled2 的构建文件?如果有人设法用 onejar 或 ProGuard 绕过依赖地狱,如果他们能解释一下如何,我会很高兴的。
更新:
我的构建文件:
resolvers ++= Seq(
"Concurrent Maven Repo" at "http://conjars.org/repo",
"spray repo" at "http://repo.spray.io"
)
val akkaV = "2.3.6"
val sprayV = "1.3.2"
libraryDependencies ++= Seq(
"org.parboiled" %% "parboiled" % "2.0.1" withSources() withJavadoc(),
// Causes org.scalamacros:quasiquotes _2.10, _2.10.3 cross-version problem
"io.spray" %% "spray-testkit" % sprayV % "test" withSources() withJavadoc(),
// Causes com.chuusai:shapeless _2.10.4, _2.10 cross-version problem
"io.spray" %% "spray-routing" % sprayV withSources() withJavadoc()
)
scalaVersion := "2.10.4"
javaOptions ++= Seq("-target", "1.8", "-source", "1.8")
organization := domain + "." + companyName
插件文件:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
斯卡拉 2.11
似乎“简单地”移动 2.11 可以解决这个问题,但如果有一些其他库还没有准备好 2.11,这并不总是那么容易。尽管如此,我还是尝试了它,第二次我添加了 parboiled2 作为依赖项,它再次破坏了我的构建,叹息,这是新问题:Parboiled2 导致“加载类文件'Prepender.class'时检测到缺少或无效的依赖项”