gpt4 book ai didi

scala - SBT 如何创建自定义命令

转载 作者:行者123 更新时间:2023-12-05 08:33:54 24 4
gpt4 key购买 nike

鉴于我有 build.sbt

name := """app"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.11.7"

// <-- some other code -->

import Fixtures._

lazy val fixtures = inputKey[Unit]("Generating Cassandra fixtures")

fixtures := {
Fixtures.generate()
}

项目目录下的Fixtures.scala

object Fixtures {
def generate (): Unit = {
println("generating fixtures")
}
}

我能够运行命令 ./activator fixtures 并且我得到“generating fixtures”

但是我怎样才能调用一些服务,比方说 GenerateUserFixtureService.scala 但来自 app/scala/com/MyProject/Service 目录。导入包不起作用,因为 project 目录属于不同的包。我无法从 Play

Fixtures.scala 导入任何内容
|
|___app
| |__scala
| |__com
| |__MyProject
| |__Service
| |--GenerateUserFixtureService.scala
|___project
| |--Fixtures.scala
|___
|--build.sbt

实际上问题是,为什么我只能从 project 目录导入文件到 build.sbt。或者如何从 app 目录调用另一个文件?

或者我的想法完全错误。我只想创建一些命令 upload:fixtures send:emails 等,并调用一些 scala 类。我怎样才能做到这一点?

最佳答案

要创建自定义命令,您必须指定一个与您的命令逻辑相对应的函数。让我们考虑几个例子:首先只打印问候消息:

 def helloSbt = Command.command("hello") { state =>
println("Hello, SBT")
state
}

commands += helloSbt

只需将此代码放入build.sbtcommandsproject key,存在于sbt.Keys > 作为 val commands = SettingKey[Seq[Command]]

当然,您可以管理命令的语句,如成功或失败:

def failJustForFun = Command.single("fail-condidtion") {
case (state, "true") => state.fail
case (state, _) => state
}

您可以通过利用 DefaultParsers 更改控制台中命令的特定部分或此命令输出的颜色:

    lazy val color = token( Space ~> ("blue" ^^^ "4" | "green" ^^^ "2") )
lazy val select = token( "fg" ^^^ "3" | "bg" ^^^ "4" )
lazy val setColor = (select ~ color) map { case (g, c) => "\033[" + g + c + "m" }

和替代方案一样,您可以扩展 xsbti.AppMain 并实现 - your own logic

关于scala - SBT 如何创建自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com