sbt - 引用 SBT 中自定义任务的未定义设置错误?

标签 sbt

我正在 SBT 中创建一个任务,该任务将创建格式正确的类路径,但当我尝试编译时,出现未定义的设置错误。该错误不足以告诉我哪些设置未定义:

[error] Reference to undefined setting: 
[error] 
[error]   *:fullClasspath from *:fcp
[error]  

这适用于以下构建配置:

import sbt._
import Keys._

object TestBuild extends Build {
    override lazy val settings = super.settings ++ Seq(
        name := "blah", scalaVersion := "2.10.2"
    )

    lazy val fcp = TaskKey[String]("fcp", "create formatted classpath")
    lazy val fcpTask = fcp <<= fullClasspath map { tasks =>
        val cp = tasks.map(_.data.getName + ":")
        s"[Classpath]$cp[/Classpath]"
    }

    lazy val project = Project(
        "project", file("."), settings = settings ++ Seq(fcpTask)
    )
}

最佳答案

三件事:

1) 您将删除所有默认设置。创建项目时,您可以指定项目的完整设置列表(就像您当前所做的那样)或者您可以添加您的设置配置到默认值。如果您将项目定义更改为以下内容,它应该开始工作:

lazy val project = (
  Project("project", file("."))
  .settings(fcpTask)
)

2) 您将设置放入 Build 本身。如果这些设置在Project 级别上不存在,那么它将在Build 中查找设置。但是,诸如 name 之类的内容可能应该在项目中定义。所以你的完整构建文件将如下所示:

import sbt._
import Keys._

object TestBuild extends Build {
    lazy val fcp = TaskKey[String]("fcp", "create formatted classpath")
    lazy val fcpTask = fcp <<= fullClasspath map { tasks =>
        val cp = tasks.map(_.data.getName + ":")
        s"[Classpath]$cp[/Classpath]"
    }
    lazy val project = (
      Project("project", file("."))
      .settings(name := "blah", scalaVersion := "2.10.2")
      .settings(fcpTask)
    )
}

3) 您应该选择要从中提取类路径的配置。选项:

  • 运行时:包括项目的已编译类+资源目录和依赖项
  • 编译:仅包含用于编译项目的依赖项
  • 测试:包括测试时使用的所有依赖项(包括项目本身)

你之前的内容相当于Compile中的fullClasspath IIRC。

希望有帮助!

关于sbt - 引用 SBT 中自定义任务的未定义设置错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22301405/

相关文章:

scala - "Repository for publishing is not specified"尽管发布成功

jenkins - 如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

Scala 不从资源文件夹中读取文件

scala - 将源添加到sbt程序集

java - Play 框架离线分发下载存储库

sbt:在子项目上运行任务

Scala 版本未更新

scala - 如何在多个项目中使用 sbt-native-packager

scala - 更改Scalatra端口

Scala SBT 将多模块项目构建为可运行的 jar