加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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是好的,如果它符合您的用例 – 不能从您的描述中判断是否.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读