首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为多个Scala版本交叉发布我的sbt插件

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

Stack Overflow用户
提问于 2018-03-27 15:09:58
回答 2查看 1K关注 0票数 1

我有以下sbt文件

代码语言:javascript
复制
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文件。

但如果我做了

代码语言:javascript
复制
sbt +publishLocal

我犯了个错误

代码语言:javascript
复制
[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版本选择正确的jars。为什么要说有冲突呢?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-28 18:50:33

sbt使用Scala的固定版本:SBT0.13使用Scala2.10,SBT1.x使用Scala2.12。所以

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

有关于交叉构建插件的文档,但我不确定它是否是最新的,所以最好在现有插件中看到一些示例。我认为为您的插件项目设置这个设置就足够了:

  • project/build.properties中: sbt.version=0.13.17
  • build.sbt设置中: sbtPlugin := true,crossSbtVersions := Seq("0.13.17","1.0.0")

有关示例,请参见sbt-样板

票数 3
EN

Stack Overflow用户

发布于 2018-03-28 18:48:13

在浏览了一下您的build.sbt之后,我发现了以下内容:

  • 移除所有依赖项不能解决问题。
  • 删除sbtPlugin := true确实解决了问题
  • 将sbt从1.x降为0.13.16有助于我编译您的示例

此外,我们应该记住SBT0.13.x是用Scala2.10编写的。

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

  • 降级sbt
  • 将Scala从2.11.2改为2.10.x

如果您不是在编写插件:

  • 删除sbtPlugin := true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49516540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档