【问题标题】:How to use in my own project a forked SBT plugin如何在我自己的项目中使用分叉的 SBT 插件
【发布时间】:2015-03-29 00:12:59
【问题描述】:

这些是我遵循的步骤:

  • 我已经分叉了一个 3rd 方插件。
  • 我已经修改了,运行sbt publishLocal成功。
  • 为了测试它,在一个项目的plugins.sbt文件中,我把addSbtPlugin("company" % "some-plugin" % "0.6.5")改成了这样:

    lazy val root = project.in( file(".") ).dependsOn(somePlugin)

    lazy val somePlugin = project.in(file(System.getProperty("user.home")+"/customPath/"))

但是SBT不能用这种方式编译插件,因为它没有找到该插件使用的插件,即使我已经可以了。

我也试过引用~/.sbt/local/....,即publishLocal放置编译插件的目录,但没有成功。我不知道我要准确引用什么(文件夹、生成的.jarivy.xml 文件……)。

问题:

  • 使用本地构建的插件的最佳方式是什么?
  • 为什么它可以单独编译,但嵌入到我的项目中时却不能?。

注意事项:

【问题讨论】:

    标签: sbt


    【解决方案1】:

    解决方案很简单。我已按照以下步骤操作:

    • 我 fork 一个现有项目
    • 我更改organization 是为了独一无二,不与原作者冲突。我使用类似organization := com.github.myuser
    • 我修改代码
    • 我在bintray 中创建了一个帐户,并关注this guide 以便使用sbt publish 发布我的自定义插件
    • 在一个示例项目中,我通过在plugins.sbt 中添加这一行来导入我的自定义插件:addSbtPlugin("com.github.myuser" % "myplugin" % "1.0")
    • 如果我犯了错误不想增加版本,我会这样做:

      sbt ;bintray::unpublish;发布

    它非常快,我不得不等待几秒钟。我知道没有其他人在使用我的插件。

    也许publishLocal 更好,并且不需要使用第 3 方存储库,但我不知道它是如何工作的。这对我有用。

    【讨论】:

      【解决方案2】:

      更好的解决方案,非常适合仅用于测试未来拉取请求的情况:

      • 分叉现有项目
      • 将版本更改为以 -SNAPSHOT 结尾
      • 进行更改
      • 调用sbt publishLocal
      • 创建一个示例项目以对其进行测试,该项目引用 -SNAPSHOT 版本
      • 如果再次重新编译项目,reload 会挂起整个 JVM。我必须退出SBT 并再次进入。
      • 工作时,给作者发pull request

      建议:使用scripted test framework 以离开工作测试。

      【讨论】:

        猜你喜欢
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 2017-08-19
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多