无法为多个Scala版本交叉发布我的sbt插件

无法为多个Scala版本交叉发布我的sbt插件,scala,sbt,Scala,Sbt,我有以下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 := "myp

我有以下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版本选择正确的JAR。为什么说有冲突


我的最终目标是让SBT为我的
CrossScalarAversions
列表中的每个scala版本发布多个jar文件。

在浏览了您的
build.SBT
之后,我发现了以下几点:

  • 删除所有依赖项并不能解决问题
  • 删除
    sbtPlugin:=true
    是否解决问题
  • 将sbt从1.x降级到0.13.16有助于编译您的示例
此外,我们应该记住sbt 0.13.x是用Scala 2.10编写的

因此,如果您正在编写sbt插件:

  • 降级sbt
  • 将Scala从2.11.2更改为2.10.x
如果您没有编写插件:

  • 删除
    sbtPlugin:=true

在浏览了您的
build.sbt
之后,我发现了以下几点:

  • 删除所有依赖项并不能解决问题
  • 删除
    sbtPlugin:=true
    是否解决问题
  • 将sbt从1.x降级到0.13.16有助于编译您的示例
此外,我们应该记住sbt 0.13.x是用Scala 2.10编写的

因此,如果您正在编写sbt插件:

  • 降级sbt
  • 将Scala从2.11.2更改为2.10.x
如果您没有编写插件:

  • 删除
    sbtPlugin:=true

sbt使用Scala的固定版本:sbt 0.13使用Scala 2.10,sbt 1.x使用Scala 2.12。所以

  • 有一点是,您无法为Scala 2.11编译sbt插件
  • 另一件事是,您应该为不同版本的sbt交叉构建插件(因为Scala版本是隐含的)
  • 有关于的文档,但我不确定它是最新的,所以最好看看现有插件中的一些示例。我认为为您的插件项目设置以下内容就足够了:

    • 项目/build.properties
      中:

      sbt.version=0.13.17
      
    • build.sbt
      设置中:

      sbtPlugin := true,
      crossSbtVersions := Seq("0.13.17", "1.0.0"),
      

    请参阅以获取示例。

    sbt使用Scala的固定版本:sbt 0.13使用Scala 2.10,sbt 1.x使用Scala 2.12。所以

  • 有一点是,您无法为Scala 2.11编译sbt插件
  • 另一件事是,您应该为不同版本的sbt交叉构建插件(因为Scala版本是隐含的)
  • 有关于的文档,但我不确定它是最新的,所以最好看看现有插件中的一些示例。我认为为您的插件项目设置以下内容就足够了:

    • 项目/build.properties
      中:

      sbt.version=0.13.17
      
    • build.sbt
      设置中:

      sbtPlugin := true,
      crossSbtVersions := Seq("0.13.17", "1.0.0"),
      

    请参阅以获取示例。

    可能不相关,但为什么使用
    inThisBuild
    ?如果使用
    sbt new scala/scala seed.g8
    命令生成scala项目,默认build.sbt文件就是这样编写的。可能不相关,但是为什么使用
    inThisBuild
    ?如果使用
    sbt new scala/scala seed.g8
    命令生成scala项目,默认的build.sbt文件就是这样写的。我在写插件。我在写插件。