【问题标题】:How to use plugin in sbt project when only the plugin's sources available?当只有插件的源可用时,如何在 sbt 项目中使用插件?
【发布时间】:2014-01-14 16:30:31
【问题描述】:

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

我想我会把这个插件的源代码直接包含在我自己的仓库中(作为一个 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:未解决的依赖项:net.koofr#sbt-scrooge;3.0.45:未找到

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

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

【问题讨论】:

标签: scala sbt


【解决方案1】:

正如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") 

【讨论】:

  • 请注意,该插件适用于 0.12.2,而答案假定 sbt 0.13+。
【解决方案2】:

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

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

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

话虽如此,我认为在您的情况下,“正确的方法”是因为 sbt-scrooge 插件似乎不再维护,是分叉项目并在您自己的存储库中维护自己。 sbt 0.13.1 已经是最新版本,插件可能还不支持。当插件通过你的 fork 获得新的生命时,其他开发人员也可能从复活中受益,并且将源附加到另一个项目只会阻碍可重用性。

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

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2017-08-19
    • 2015-02-26
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    相关资源
    最近更新 更多