当前位置: 首页 > 知识库问答 >
问题:

在sbt 0.11中的自定义任务中获取项目的源文件

米项禹
2023-03-14

我使用SBT 0.11。

我有以下build.sbtsbt项目中的文件:

myAction := {
  // val srcFiles = ?
  // How can I make srcFiles a List[File] of all sources files?
  println("This is my action")
}

它工作得很好,但我如何访问所有Java/Scala源文件路径之类的设置,例如src/main/Scala/*。scala和目标类目录,例如target/scala-2.9.1/class?


共有1个答案

仰英发
2023-03-14

定义一个taskKey,说

你的行动任务

然后

yourActionTask <<= (baseDirectory, target, packageBin in Compile, resources in Compile...) map { (basedir, targetDir, bin, res...)=>  
     // use these resources to complete your task as per your needs
}

顺便说一句,你可以在键中找到更多预定义的任务/键。scala源代码或sbt的scaladoc。

下面是一个示例,您可以参考它,它是从我的一个构建文件中提取的(只需将TaskKey和任务定义结合在一起,因为我不想麻烦,我将来会重用TaskKey):

  val distTask = TaskKey[Unit]("dist", "distribute the deployment package of eromanga") <<= (baseDirectory, target, fullClasspath in Compile, packageBin in Compile, resources in Compile, streams) map {
(baseDir, targetDir, cp, jar, res, s) =>
  s.log.info("[dist] prepare distribution folders...")
  val assemblyDir = targetDir / "dist"
  val confDir = assemblyDir / "conf"
  val libDir = assemblyDir / "lib"
  val binDir = assemblyDir / "bin"
  Array(assemblyDir, confDir, libDir, binDir).foreach(IO.createDirectory)

  s.log.info("[dist] copy jar artifact to lib...")
  IO.copyFile(jar, libDir / jar.name)

  s.log.info("[dist] copy 3rd party dependencies to lib...")
  cp.files.foreach(f => if (f.isFile) IO.copyFile(f, libDir / f.name))

  s.log.info("[dist] copy shell scripts to bin...")
  ((baseDir / "bin") ** "*.sh").get.foreach(f => IO.copyFile(f, binDir / f.name))

  s.log.info("[dist] copy configuration templates to conf...")
  ((baseDir / "conf") * "*.xml").get.foreach(f => IO.copyFile(f, confDir / f.name))

  s.log.info("[dist] copy examples chanenl deployment...")
  IO.copyDirectory(baseDir / "examples", assemblyDir / "examples")

  res.filter(_.name.startsWith("logback")).foreach(f => IO.copyFile(f, assemblyDir / f.name))
  }
 类似资料:
  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • 正在开发一个应用程序,采取学生考勤,我想得到的名单上勾选的名字“考勤”,当我点击一个“考勤”在相同的自定义列表视图。拜托,我该怎么做? 这是我的密码...自定义视图 ListAdapter公共类StudentListAdapter1扩展了BaseAdapter{private Context mContext;private List mStudentList; } 考勤activityprote

  • 例如,我有一个插件:公共类PluginA实现plugin。 我会创建一个任务塔斯卡。现在我想设置:taska.dependson taskB,但是taskB是在pluginb中定义的。 有没有可能做到这一点,如果可以,如何做到?

  • 我正在写一些gradle插件,现在我遇到了一个问题,DriverManager看不到buildscript依赖项中定义的JDBC驱动程序: 我有下一个build.gradle文件: 当我调用扩展DefaultTask的任务中定义的命令时

  • 我有两个Gradle子项目,它们基本上都是哑protobuf容器。一个子项目需要从另一个子项目导入定义,但我似乎不知道如何让protobuf Gradle插件正常工作(我对Gradle还比较陌生)。 这里有一个例子。 目录布局: 建筑gradle(顶层) 设置。格拉德尔 gradle.properties 依赖关系/构建。格拉德尔 依赖关系/src/main/proto/dependency。原型

  • 我在Wordpress中有一个名为“svg”的ACF字段菜单 为了创建我的菜单,我这样做: 我像这样显示我的菜单: 在我的Foreach中,我试图从我的菜单中调用我的ACF字段,如下所示: 但它不起作用(空)。我迷路了。如何获取我的 ACF 字段? 真是太感谢你了