如何在我自己的项目中使用分叉的 SBT 插件
Posted
技术标签:
【中文标题】如何在我自己的项目中使用分叉的 SBT 插件【英文标题】:How to use in my own project a forked SBT plugin 【发布时间】: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
放置编译插件的目录,但没有成功。我不知道我要准确引用什么(文件夹、生成的.jar
、ivy.xml
文件……)。
问题:
使用本地构建的插件的最佳方式是什么? 为什么它可以单独编译,但嵌入到我的项目中时却不能?。注意事项:
这个问题和这个问题密切相关:In sbt, how do you add a plugin that's in the local filesystem? 我使用的是 SBT 0.13.7。【问题讨论】:
【参考方案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 以离开工作测试。
【讨论】:
以上是关于如何在我自己的项目中使用分叉的 SBT 插件的主要内容,如果未能解决你的问题,请参考以下文章