簡體   English   中英

如果只有插件的源可用,如何在sbt項目中使用插件?

[英]How to use plugin in sbt project when only the plugin's sources available?

我想使用sbt-scrooge插件,但它的repo現在不可用 - http://koofr.github.com/

我以為我會將這個插件的源代碼直接包含在我自己的repo中(作為git子模塊)。

我試過了:

git submodule add https://github.com/bancek/sbt-scrooge.git project/sbt-scrooge

並補充說:

addSbtPlugin("net.koofr" % "sbt-scrooge" % "3.0.45")

to project/plugins.sbt 但它不起作用 - 拋出以下異常:

sbt.ResolveException:未解析的依賴項:net.koofr#sbt-scrooge; 3.0.45:未找到

這樣做的正確方法是什么?

我知道我可以將sbt-scrooge簽出到本地文件系統,然后sbt publish-local ,並將本地ivy2 repo添加到sbt作為解析器。 但我只是想知道是否有其他方法可以做到這一點。

如此處所述您可以在project/plugins.sbt

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

lazy val scroogePlugin = file("sbt-scrooge") 

或者簡單地說(不創建本地子模塊):

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

lazy val scroogePlugin = uri("https://github.com/bancek/sbt-scrooge.git") 

如果你想使用一個插件,它必須可用於sbt(並以某種方式在你的本地存儲庫中找到它的位置,這樣addSbtPlugin最終可以找到它或你的sbt項目的project (子)項目應該在類路徑上)。

請注意,並非所有插件都應該是sbt項目的組成部分。 恰恰相反 - 它們可以在項目中使用,但這並不一定意味着它們應該由任何項目特定的文件(在項目的目錄中)引用,例如插件來生成特定於IDE的文件。 這些插件應該在全球配置的一部分~/.sbtplugins

還有插件和sbt之間版本不匹配的問題。 在您的情況下,sbt-scrooge支持在sbt 0.13+中可能無法使用的0.12.2 (請參閱project / build.properties )。

話雖如此,我認為自從sbt-scrooge插件似乎不再維護以來你的案例中的“正確方法”是分叉項目並將自己保存在自己的存儲庫中。 sbt 0.13.1已經是最新版本了,插件可能還不支持它。 當插件獲得新的生命時,其他開發人員也可能從復活中獲益,並且將源連接到另一個項目只會妨礙可重用性。

類似問題的答案幫助我提供了一個可以與sbt 0.12.2而無需克隆git存儲庫的工作解決方案。

$ cat project/build.properties
sbt.version=0.12.2

$ cat project/project/SbtScroogePlugin.scala
import sbt._

object SbtScroogePlugin extends Build {
    lazy val plugins = Project("plugins", file(".")) dependsOn sbtScroogePlugin
    lazy val sbtScroogePlugin = uri("https://github.com/bancek/sbt-scrooge.git")
}

$ cat sbt-scrooge.sbt
import net.koofr.sbt._

seq(CompileThriftScrooge.newSettings: _*)

使用上面的項目文件,sbt應該能夠使用sbt-scrooge插件的任務和設置。

$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/plugins
[info] Loading project definition from /Users/jacek/sandbox/tmp/sample-project/project/project
[info] Loading project definition from /Users/jacek/.sbt/staging/52a2b7ff1377492a32ff/project
[info] Loading project definition from /Users/jacek/sandbox/tmp/sample-project/project
[info] Set current project to default-fe8e50 (in build file:/Users/jacek/sandbox/tmp/sample-project/)
> about
[info] This is sbt 0.12.2
[info] The current project is {file:/Users/jacek/sandbox/tmp/sample-project/}default-fe8e50
[info] The current project is built against Scala 2.9.2
[info] Available Plugins: org.sbtidea.SbtIdeaPlugin, com.timushev.sbt.updates.UpdatesPlugin, net.koofr.sbt.CompileThriftScrooge
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2
> scrooge-version
[info] 3.0.43

對於其他任務和設置,請編寫scrooge-並點擊TAB

> scrooge-[TAB]
scrooge-build-options                   scrooge-cache-folder                    scrooge-fetch                           scrooge-gen
scrooge-jar                             scrooge-name                            scrooge-thrift-external-source-folder   scrooge-thrift-include-folders
scrooge-thrift-namespace-map            scrooge-thrift-output-folder            scrooge-thrift-source-folder            scrooge-thrift-sources
scrooge-unpack-deps                     scrooge-version

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM