冲突的交叉版本后缀:org.scalamacros:quasiquotes

时间:2014-04-18 07:25:26

标签: scala sbt scala-pickling scala-quasiquotes scala-2.11

我正在尝试在scala-pickling之一中使用my project。我尝试mimic macroid的构建文件似乎也使用了酸洗但我在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)

完整版本日志为here。我究竟做错了什么?我应该在build.sbt中更改哪些内容以解决此问题?我也应该能够针对2.10.x2.11.x交叉编译和发布我的库。

3 个答案:

答案 0 :(得分:3)

从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之后的准引号。

我认为除了升级使用旧的quasiquote库的所有依赖项之外,我不认为这可以解决,因为M7之前和M7之后的quasiquote库是不兼容的。

答案 1 :(得分:1)

问题是您正在使用两个不同版本的quasiquotes模块,它允许定义Scala宏。您应确保仅使用单个版本,并且此单个版本与使用宏的所有依赖项匹配。

另外,你确定scala 2.11.x发布了scala-pickling吗?从他们的构建文件判断,他们仅针对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-pickling中的版本匹配。

scalaVersion := "2.10.3"

编辑:有关更详细的解释,请参阅以下Eugene的答案。

答案 2 :(得分:1)

根据我的依赖格拉夫来自spray-testkit_2.10-1.3.2,specs2_2.10 v1.3.10仍在使用quasiquotes的里程碑版本。因此,我运行了交叉版本错误问题。