scala – 定义从项目代码调用方法的sbt任务?
发布时间:2020-12-16 09:19:41 所属栏目:安全 来源:网络整理
导读:我正在使用SBT来构建scala项目.我想定义一个非常简单的任务,当我在sbt中输入generate时: sbt generate 它将调用my.App.main(..)方法来生成一些东西. myproject / src / main / scala / my中有一个App.scala文件,简化的代码如下所示: object App { def main
我正在使用SBT来构建scala项目.我想定义一个非常简单的任务,当我在sbt中输入generate时:
sbt> generate 它将调用my.App.main(..)方法来生成一些东西. myproject / src / main / scala / my中有一个App.scala文件,简化的代码如下所示: 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()) } } 但它仍然无法编译,它找不到我的包. 如何在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建议使用resourceGenerators或sourceGenerators是好的,如果它符合您的用例 – 不能从您的描述中判断是否. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |