gpt4 book ai didi

scala - 定义从项目代码调用方法的sbt任务?

转载 作者:行者123 更新时间:2023-12-03 13:27:54 26 4
gpt4 key购买 nike

我正在使用SBT构建一个scala项目。我想定义一个非常简单的任务,即当我在sbt中输入generate时:

sbt> generate

它将调用我的 my.App.main(..)方法生成一些东西。
App.scala中有一个 myproject/src/main/scala/my文件,简化后的代码如下:
object App {
def main(args: Array[String]) {
val source = readContentOfFile("mysource.txt")
val result = convert(source)
writeToFile(result, "mytarget.txt");
}
// ignore some methods here
}

我试图将以下代码添加到 myproject/build.sbt中:
lazy val generate = taskKey[Unit]("Generate my file")

generate := {
my.App.main(Array())
}

但是由于无法找到 my.App而无法编译。

然后我尝试将其添加到 myproject/project/build.scala:
import sbt._
import my._

object HelloBuild extends Build {

lazy val generate = taskKey[Unit]("Generate my file")

generate := {
App.main(Array())
}

}

但是它仍然无法编译,找不到包 my

如何在SBT中定义这样的任务?

最佳答案

.sbt格式执行:

lazy val generate = taskKey[Unit]("Generate my file")

fullRunTask(generate, Compile, "my.App")

http://www.scala-sbt.org/0.13.2/docs/faq.html上有记录,“除了运行外,我如何创建自定义运行任务?”

另一种方法是:
lazy val generate = taskKey[Unit]("Generate my file")

generate := (runMain in Compile).toTask(" my.App").value

在简单的情况下效果很好,但无法自定义。

更新:如果适合您的用例,Jacek的建议是改用 resourceGeneratorssourceGenerators-建议-从您的描述中无法确定是否合适。

关于scala - 定义从项目代码调用方法的sbt任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409993/

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