我正试图在我的一个项目中使用scala pickle。我试图模仿macroid的构建文件,它似乎也使用pickle,但我在sbt test
:上一直收到这个错误
[error] Modules were resolved with conflicting cross-version suffixes in dijon:
[error] org.scalamacros:quasiquotes _2.10, _2.10.3
java.lang.RuntimeException: Conflicting cross-version suffixes in: org.scalamacros:quasiquotes
at scala.sys.package$.error(package.scala:27)
at sbt.ConflictWarning$.processCrossVersioned(ConflictWarning.scala:47)
at sbt.ConflictWarning$.apply(ConflictWarning.scala:30)
at sbt.Classpaths$$anonfun$61.apply(Defaults.scala:1044)
at sbt.Classpaths$$anonfun$61.apply(Defaults.scala:1044)
完整的生成日志在这里。我做错了什么?我应该在build.sbt中更改什么来修复此问题?我还应该能够针对2.10.x
和2.11.x
交叉编译和发布我的库。
从2.0.0-M7开始,org.scalamacros % quasiquotes
被交叉版本化为二进制(即_2.10
),而不是完整版本(即_2.10.x
):http://scalamacros.org/news/2014/04/03/macro-paradise-2.0.0-M7.html.看起来你的一个依赖项使用M7前的准引号,另一个使用M7后的准引号。
我认为除了升级所有使用旧的准引号库的依赖项之外,这无法以任何方式解决,因为M7之前和M7之后的准引号库都不兼容。
问题是您使用了两个不同版本的准引号模块,该模块允许定义Scala宏。您应该确保只使用单个版本,并且该单个版本与所有使用宏的依赖项相匹配。
另外,你确定scala pickle是为Scala2.11.x发布的吗?从他们的构建文件来看,他们只为2.10.3
-https://github.com/scala/pickling/blob/2.10.x/project/Build.scala#L10.
首先,尝试删除:
crossScalaVersions := Seq("2.10.4", "2.11.0-RC4")
然后再试一次。之后,将Scala版本设置为2.10.3
,使其与Scala pickle中的版本相匹配。
scalaVersion := "2.10.3"
编辑:关于更详细的解释,请参阅下面尤金的回答。
根据我从spray-testkit_210-1.3.2中获得的dependencyGraph,specs2_2.10 v1.3.10仍在使用准引号的里程碑版本。因此,我运行了跨版本错误问题。