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

问题描述 投票:0回答:2

我有以下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/

中生成了一个jar文件

但是如果我做一个

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 为我的

crossScalaVersions
列表中的每个 scala 版本发布多个 jar 文件。

scala sbt
2个回答
4
投票

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

  1. 有一件事是你不能为 Scala 2.11 编译 sbt 插件,
  2. 另一件事是你应该为不同版本的 sbt 交叉构建你的插件(因为隐含了 Scala 版本)。

有关于Cross building plugins的文档,但我不确定它是最新的,所以最好在现有插件中查看一些示例。我认为为您的插件项目设置此设置就足够了:

  • project/build.properties

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

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

有关示例,请参见sbt-boilerplate


1
投票

在与您的

build.sbt
四处闲逛后,我发现了以下内容:

  • 删除所有依赖项does不能解决问题
  • 删除
    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
© www.soinside.com 2019 - 2024. All rights reserved.