测试 sbt 插件

Posted

技术标签:

【中文标题】测试 sbt 插件【英文标题】:Test sbt plugin 【发布时间】:2019-05-11 19:13:28 【问题描述】:

为 sbt 0.13 编写我的第一个插件并尝试关注 https://www.scala-sbt.org/0.13/docs/Testing-sbt-plugins.html。 在进入第 5 步之前,这一切都像宣传的那样工作。它会打印消息“正在运行.../简单”并且永远不会从那里继续:

build/sbt -Dplugin.version=0.14.8
Detected CYGWIN environment
Reading sbt jar from: build/sbt-launch-0_13_9.jar
[info] Loading project definition from project\home\dir\sheep-metadata-plugin\project
[info] Updating file:/project/home/dir/sheep-metadata-plugin/project/sheep-metadata-plugin-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to sheep_metadata (in build file:/project/home/dir/sheep-metadata-plugin/)
> set scriptedBufferLog := false
[info] Defining sheep_metadata/*:scriptedBufferLog
[info] The new value will be used by sheep_metadata/*:scripted
[info] Reapplying settings...
[info] Set current project to sheep_metadata (in build file:/project/home/dir/sheep-metadata-plugin/)
> scripted
[info] :: delivering :: com.myco.sheep.sbt#metadata;0.0.1-SNAPSHOT :: 0.0.1-SNAPSHOT :: integration :: Mon Dec 10 15:11:00 EST 2018
[info]  delivering ivy file to project\home\dir\sheep-metadata-plugin\metadata\target\sbt-0.13\ivy-0.0.1-SNAPSHOT.xml
[info] Packaging project\home\dir\sheep-metadata-plugin\metadata\target\sbt-0.13\metadata-0.0.1-SNAPSHOT.jar ...
[info] Done packaging.
[info]  published metadata to myHomeDir\.ivy2\local\com.myco.sheep.sbt\metadata\scala_2.10\sbt_0.13\0.0.1-SNAPSHOT\jars\metadata.jar
[info]  published metadata to myHomeDir\.ivy2\local\com.myco.sheep.sbt\metadata\scala_2.10\sbt_0.13\0.0.1-SNAPSHOT\srcs\metadata-sources.jar
[info]  published metadata to myHomeDir\.ivy2\local\com.myco.sheep.sbt\metadata\scala_2.10\sbt_0.13\0.0.1-SNAPSHOT\docs\metadata-javadoc.jar
[info]  published ivy to myHomeDir\.ivy2\local\com.myco.sheep.sbt\metadata\scala_2.10\sbt_0.13\0.0.1-SNAPSHOT\ivys\ivy.xml
Running sheep-metadata-plugin / simple

主项目的构建工作:

build/sbt -Dplugin.version=0.14.8 clean update compile

但是当我尝试教程中的第 5 步(即运行 scripted)时,没有错误消息,但也没有成功 - 它永远不会终止。

更新:在 Windows 7 + Babun Cygwin 上,我没有收到错误消息。在 Linux 上,sbt 抱怨 plugin.version,尽管我按照指示传递了它。

[info] java.lang.RuntimeException: The system property 'plugin.version' is not defined.
[info] Specify this property using the scriptedLaunchOpts -D.

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

已修复/澄清/找到解决方法:

首先,我们澄清一下https://www.scala-sbt.org/0.13/docs/Testing-sbt-plugins.html中引用的assembly插件必须添加到simple项目中,而不是主项目中。

接下来,我放弃了通过命令行参数设置sbt-assembly版本号,直接指定了

sheep-metadata-plugin\metadata\src\sbt-test\sheep-metadata-plugin\simple\project\plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8")

如果有人弄清楚如何使示例按照教程中的说明工作,那就太好了。

【讨论】:

以上是关于测试 sbt 插件的主要内容,如果未能解决你的问题,请参考以下文章

使用 SBT 如何在运行测试之前对插件中的任务进行排序

您可以从 sbt 提示符注入编译器插件吗?

如何在我自己的项目中使用分叉的 SBT 插件

使 SBT 子项目任务依赖于另一个子项目任务

在另一个 SBT 插件中显式启用 SBT 插件

如何在 sbt 项目中使用 sbt 插件作为库依赖项?