scala - 如何更改 play/sbt 下自定义配置的设置值?

标签 scala playframework sbt playframework-2.2

我有一个 play 项目,我想添加一个 sbt 任务,该任务使用给定的文件夹作为资源运行应用程序。但是,我不希望该文件夹在“正常”运行期间位于类路径中。

我创建了一个配置,将资源添加到该配置,但是当我在该配置中运行时,文件没有被拾取

例如,我有:

val Mock = config(“mock”) extend Compile
val mock = inputKey[Unit]("run in mock mode")

val project = Project(“my project”, file(“src/”))
.configs(Mock)
.settings(
      unmanagedResourceDirectories in Mock ++= Seq(baseDirectory.value / “mock-resources”)
      mock <<= run in Mock
)

我想要这样当我输入 mockmock-resources 在类路径中,而当我输入 run 时它不在

我正在使用 play 2.2.0 和 sbt 0.13.1

最佳答案

您需要将Compile 配置下的适当设置和任务设置为新定义的Mock 配置。原因是这样的:

lazy val Mock = config("mock") extend Compile

Mock 下没有设置或任务时,sbt 会继续在 Compile 中搜索,其中确实定义了 run 但使用 Compile 值。

执行以下操作,它将起作用 - 注意 Classpaths.configSettingsSeq 中的 run:

lazy val Mock = config("mock") extend Compile

lazy val mock = inputKey[Unit]("run in mock mode")

lazy val mockSettings = inConfig(Mock) {
  Classpaths.configSettings ++
  Seq(
    unmanagedClasspath += baseDirectory.value / "mock-resources",
    mock <<= run in Mock,
    run <<= Defaults.runTask(fullClasspath in Mock, mainClass in Mock, runner in Mock)
  )
}

lazy val p = (project in file("src/")).configs(Mock).settings(
  mockSettings: _*
)

注意 我不确定为什么需要以下行:

run <<= Defaults.runTask(fullClasspath in Mock, mainClass in Mock, runner in Mock)

我的猜测是因为 run 使用默认为 Compile 范围的 fullClasspath 它在 Mock< 中看不到值sbt 让我惊艳!

我已经在 Why does the default run task not pick settings in custom configuration? 中询问过了

示例

我一直在 src 目录下使用以下 hello.scala 运行构建:

object Hello extends App {
    val r = getClass.getResource("/a.properties")
    println(s"resource: $r")
}

p/mock:mock 上它给了我:

> p/mock:mock
[info] Running Hello
resource: file:/Users/jacek/sandbox/mock-config/src/mock-resources/a.properties

同样适用于 p/mock:run:

> p/mock:run
[info] Running Hello
resource: file:/Users/jacek/sandbox/mock-config/src/mock-resources/a.properties

mock 也不异常(exception):

> mock
[info] Running Hello
resource: file:/Users/jacek/sandbox/mock-config/src/mock-resources/a.properties

关于scala - 如何更改 play/sbt 下自定义配置的设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24933269/

相关文章:

playframework - 无路线上令人困惑的游戏框架错误

apache-spark - 如何为Spark Streaming定义Kafka(数据源)依赖项?

scala - 禁用 sbt 自定义任务的聚合

java - 在 Scala 中使用 Java 接口(interface)时,编译器提示方法未实现

scala - Play : How to prevent the body parser from being invoked in case the action code does not get executed

scala - 从多个隐式对象自动导入

scala - 如何在 play 2.5 中测试使用自定义解析器的 Controller 方法?

Scala Akka Streams 项目无法编译, "value ~> is not a member of akka.streams.Outlet[In]"

scala - Spark数据框似乎被重新计算了两次

java - Scala Slick 3.0 java8 OffsetDateTime 和 Timestamp 之间的隐式映射