【问题标题】:sbt plugin - own configuration classpath incompletesbt 插件 - 自己的配置类路径不完整
【发布时间】:2017-03-24 18:21:34
【问题描述】:

我想为一种新的测试创建一个 sbt 插件。为了简单起见,我创建了一个小型模糊测试插件,类似于sbt docs 中提到的插件。

我的插件类目前看起来像这样:

package sbtfuzz

import sbt._, Keys._

object FuzzPlugin extends sbt.AutoPlugin {
  override def requires = plugins.JvmPlugin
  override def trigger = allRequirements

  object autoImport {
    lazy val Fuzz = config("fuzz") extend(Compile)
  }
  import autoImport._

  lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
    test := {
      println("fuzz test")
    }
  )
  override lazy val projectSettings = inConfig(Fuzz)(baseFuzzSettings) ++ inConfig(Fuzz)(Defaults.compileSettings)
}

我在文档中的代码中添加的唯一内容是 inConfig(Fuzz)(Defaults.compileSettings) 到 get 任务以编译代码。

如果我执行sbt fuzz:compile,则会编译src/fuzz/scala 中的源代码。但是如果源代码依赖于实际的项目代码(就像所有测试一样)编译失败,因为找不到类。我猜这是因为fuzz:fullClasspath 只有一个条目:

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/fuzz-classes)

test:fullClasspath 包含项目类以及其中的依赖项:

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/test-classes)
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/classes)
[info] * Attributed(~/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar)
[info] * Attributed(~/.ivy2/cache/org.scala-sbt/sbt/jars/sbt-0.13.13.jar)
...

这样test:compile 能够成功编译测试类而fuzz:compile 不能。

如何像 test 配置那样配置我的 fuzz 配置,包括所有项目依赖项?

谢谢!

编辑: 我发现了一个(在我看来)相当肮脏的解决方法:

lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
  fullClasspath in Fuzz ++= (dependencyClasspath in Test).value,
  dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value,
  ...
)

有了这个,我可以成功编译我的模糊类。有没有更理智的方法来做到这一点?谢谢!

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    对于测试配置,请使用 Defaults.testSettingsDefaults.testTasks。请注意,顺序很重要:

    inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseSettings)
    

    【讨论】:

    • 不幸的是,它不起作用,我的类路径中仍然只有fuzz-classes。我将autoImport 更改为从Test 扩展并将项目设置更改为override lazy val projectSettings = inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseFuzzSettings)
    • 我唯一能想到的另一件事是在项目的build.sbt 文件中调用configs(Fuzz)。我不知道如何通过设置来做到这一点。
    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2019-12-26
    • 2011-12-16
    相关资源
    最近更新 更多