我有以下sbt文件
lazy val root = (project in file(".")).
settings(
inThisBuild(List(
sbtPlugin := true,
organization := "com.foo",
crossScalaVersions := Seq("2.11.2", "2.12.0"),
version := "1.0.0"
)),
name := "myplugin",
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-xml" % "1.0.6",
"com.typesafe" % "config" % "1.3.3"
)
)
现在我可以轻松地sbt publishLocal
,我发现它会在.ivy2/local/com.foo/myplugin/scala_2.12/sbt_1.0/1.0.0/jars/
但如果我做了
sbt +publishLocal
我收到错误
[error] Modules were resolved with conflicting cross-version suffixes in ProjectRef(uri("file:/Users/user/myplugin/"), "root"):
[error] org.scala-lang.modules:scala-xml _2.11, _2.12
[error] org.scala-lang.modules:scala-parser-combinators _2.11, _2.12
[error] java.lang.RuntimeException: Conflicting cross-version suffixes in: org.scala-lang.modules:scala-xml, org.scala-lang.modules:scala-parser-combinators
[error] at scala.sys.package$.error(package.scala:27)
[error] at sbt.librarymanagement.ConflictWarning$.processCrossVersioned(ConflictWarning.scala:39)
[error] at sbt.librarymanagement.ConflictWarning$.apply(ConflictWarning.scala:19)
[error] at sbt.Classpaths$.$anonfun$ivyBaseSettings$64(Defaults.scala:1995)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] at sbt.std.Transform$$anon$4.work(System.scala:66)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
我的期望是SBT将进行两次编辑和发布,每次都会为正确的Scala版本挑选合适的罐子。为什么说有冲突?
我的最终目标是让SBT在我的crossScalaVersions
列表中为每个scala版本发布一个jar文件。
答案 0 :(得分:1)
用你的build.sbt
探讨后,我发现了以下内容:
sbtPlugin := true
执行解决问题此外,我们应该记住 sbt 0.13.x是使用Scala 2.10 编写的。
所以,如果你正在写一个sbt插件:
如果你不是在写插件:
sbtPlugin := true
答案 1 :(得分:1)
sbt使用固定版本的Scala:sbt 0.13使用Scala 2.10,sbt 1.x使用Scala 2.12。所以
有关于Cross building plugins的文档,但我不确定它是否是最新的,所以在现有插件中查看一些示例会更好。我认为为插件项目设置这个设置应该足够了:
:
project/build.properties
在sbt.version=0.13.17
设置中:
build.sbt
有关示例,请参阅sbt-boilerplate。