SBT插件在非托管jar文件中

时间:2015-12-15 22:54:55

标签: scala sbt unmanaged sbt-plugin

要求:SBT插件代码位于非托管jar中,例如lib/unmanaged-sbt-plugin-0.0.1.jar。 我期待SBT会自动拾取jar文件,插件可以开箱即用,即:可以从SBT命令行访问任务,但事实并非如此。

jar文件中包含sbt/sbt.autoplugins文件,如果从远程仓库中提取到本地文件并通过addSbtPlugin(...)导入,则插件可以正常工作。请注意我不能这样做 - 要求从lib/unmanaged-sbt-plugin-0.0.1.jar而不是从本地/远程仓库加载它。

build.sbt中添加以下内容并不会使插件正常工作(也不会出错):

unmanagedJars in Compile += file("lib/unmanaged-sbt-plugin-0.0.1.jar")

addSbtPlugin(...)的实施很简单(根据http://www.scala-sbt.org/0.12.2/docs/Getting-Started/Using-Plugins.html):

def addSbtPlugin(dependency: ModuleID): Setting[Seq[ModuleID]] =
  libraryDependencies <+= (sbtBinaryVersion in update, scalaBinaryVersion in update) 
  { (sbtV, scalaV) => sbtPluginExtra(dependency, sbtV, scalaV) }

我想知道上述信息是否可用于解决我的问题?

提前谢谢!

2 个答案:

答案 0 :(得分:7)

因此,您可以为库依赖项(ModuleID)指定显式URL:

addSbtPlugin("org.my-org" % "unmanaged-sbt-plugin" % "0.0.1"
  from "file:///./lib/unmanaged-sbt-plugin-0.0.1.jar")

答案 1 :(得分:0)

一直在努力让这个工作。 无法使用from "file://.."(使用sbt 1.0.4)使用提议的解决方案。

通过将插件放在project/lib文件夹中,并使用plugins.sbt中的所有插件依赖项添加到libraryDependencies ++= Seq(..),就像build.sbt一样。您可以通过查看插件pom文件找到插件依赖项,通常位于.ivy2/local/<org>/<pluginname>/poms文件夹中。