【问题标题】:Cross Publishing of SBT Plugins not workingSBT 插件的交叉发布不起作用
【发布时间】:2018-04-05 02:33:54
【问题描述】:

我的目标是编写一个可供 SBT 0.13.x 和 1.x 版本的 SBT 使用的 SBT 插件。基于this 线程和this 文档。我为我的插件项目编写了以下 build.sbt

lazy val foo = (project in file(".")).settings(
   name := "foo",
   sbtPlugin := true,
   organization := "com.bar",
   version := "1.0.0",
   scalaVersion:= "2.12.4",
   sbtVersion in Global := "1.0.0",
   crossSbtVersions := Seq("0.13.17", "1.0.0"),
   libraryDependencies ++= Seq(
       "com.typesafe" % "config" % "1.3.3"
   ),
   scalaCompilerBridgeSource := {
      val sv = appConfiguration.value.provider.id.version
      ("org.scala-sbt" % "compiler-interface" % sv % "component").sources
   }
)

当我这样做时sbt +publichLocal 我明白了

info] Packaging /Users/user1/IdeaProjects/fulfillment-sbt/target/scala-2.12/sbt-0.13/foo-1.0.0-javadoc.jar ...
[info] Done packaging.
[info]  published foo to /Users/user1/.ivy2/local/com.bar/foo/scala_2.12/sbt_0.13/1.0.0/poms/foo.pom
[info]  published foo to /Users/user1/.ivy2/local/com.bar/foo/scala_2.12/sbt_0.13/1.0.0/jars/foo.jar
[info]  published foo to /Users/user1/.ivy2/local/com.bar/foo/scala_2.12/sbt_0.13/1.0.0/srcs/foo-sources.jar
[info]  published foo to /Users/user1/.ivy2/local/com.bar/foo/scala_2.12/sbt_0.13/1.0.0/docs/foo-javadoc.jar
[info]  published ivy to /Users/user1/.ivy2/local/com.bar/foo/scala_2.12/sbt_0.13/1.0.0/ivys/ivy.xml
[success] Total time: 9 s, completed Apr 4, 2018 11:12:38 AM

但它没有针对 1.0 版本的 SBT 发布。我可以为这两个版本的 SBT 发布什么?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    我去了 SBT 的 gitter 频道,在那里与 SBT 的创建者进行了交谈。基于该对话,我创建了一个工作示例。我在这里列出它是为了帮助将来有人交叉发布 sbt 插件。

    项目/build.properties

    sbt.version=0.13.17
    

    build.sbt

    lazy val p = (project in file(".")).settings(
       name := "sbt-crosspublish",
       sbtPlugin := true,
       organization := "com.abhi",
       version := "1.0.0",
       crossScalaVersions := Seq("2.10.6", "2.12.0"),   
       crossSbtVersions := Seq("0.13.17", "1.0.0"),
       libraryDependencies ++= Seq(
           "com.typesafe" % "config" % "1.3.3"
       ),
       scalaCompilerBridgeSource := {
          val sv = appConfiguration.value.provider.id.version
          ("org.scala-sbt" % "compiler-interface" % sv % "component").sources
       }
    )
    

    最后,为了交叉发布 SBT 插件,我们必须这样做

    sbt ^publishLocal
    

    哇。不知道^ sbt +publishLocal 是用于交叉发布普通二进制文件而不是插件。对于sbt插件的交叉发布,我们必须做到sbt ^publishLocal

    需要注意的一点是,只有在使用 SBT 0.13.17 时才需要 scalaCompilerBridgeSource。如果您在插件项目中升级到 SBT 1.1.0,那么代码会被简化。

    项目/build.properties

    sbt.version=1.1.2
    

    build.sbt

    lazy val p = (project in file(".")).settings(
       name := "sbt-crosspublish",
       sbtPlugin := true,
       organization := "com.abhi",
       version := "1.0.0",
       crossScalaVersions := Seq("2.10.6", "2.12.0"),   
       crossSbtVersions := Seq("0.13.17", "1.0.0"),
       libraryDependencies ++= Seq(
           "com.typesafe" % "config" % "1.3.3"
       )
    )
    

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 2018-09-06
      • 2013-04-03
      • 1970-01-01
      • 2018-09-25
      • 2019-01-29
      • 2017-03-01
      • 2012-01-17
      • 2014-06-06
      相关资源
      最近更新 更多