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

时间:2013-12-27 04:13:52

标签: scala sbt

我想使用sbt-scrooge插件,但它的回购现在不可用 - 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")

project/plugins.sbt。但它不起作用 - 抛出以下异常:

  

sbt.ResolveException:unresolved dependency:net.koofr#sbt-scrooge; 3.0.45:not found

这样做的正确方法是什么?

我知道我可以将sbt-scrooge签出到本地文件系统,然后sbt publish-local,并将本地ivy2 repo添加到sbt作为解析器。但我只是想知道是否有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:7)

正如here所述,您可以将其添加到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") 

答案 1 :(得分:1)

如果你想使用插件,它必须可用于sbt(并以某种方式在你的本地存储库中找到它的位置,以便addSbtPlugin最终可以找到它或你的project(子)项目sbt项目应该在类路径上。)

请注意,并非所有插件都应该是sbt项目的组成部分。恰恰相反 - 它们可以在项目中使用,但这并不一定意味着它们应该由任何项目特定的文件(在项目的目录中)引用,例如,插件生成特定于IDE的文件。这些插件应该是~/.sbtplugins下的全局配置的一部分。

插件和sbt之间也存在版本不匹配的问题。在您的情况下,sbt-scrooge支持0.12.2(请参阅project/build.properties)在sbt 0.13 +中可能无法使用。

话虽如此,我认为自sbt-scrooge插件似乎不再维护以来你的案例中的“正确方法”是分叉项目并将自己保存在自己的存储库中。 sbt 0.13.1已经是最新版本了,插件可能还不支持它。当插件获得新的生命时,其他开发人员也可能从复活中获益,并且将源连接到另一个项目只会妨碍可重用性。

The answer to a similar question帮助我提供了一个可以与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