如何为SBT创建编译器Action

时间:2010-03-09 17:26:37

标签: scala gcj sbt

我想创建一个Action来自动化GCJ编译。自I couldn't make it work with Ant以来,我决定尝试SBT。文档说明了如何创建Action以及如何运行外部流程。我还没有看到如何重用java和scala编译器Actions存在的目录树遍历。在这种情况下,我的输入文件将是某个根文件夹下的所有.class文件。我还需要为GCJ指定一个特定的类路径。任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:4)

我根本没有使用过GCJ,而且我在SBT仍然很新,但我相信你可以写一个快速的任务来完成你正在寻找的SBT 0.7.1。您可以使用PathFinder来抓取所有类文件,如下所示:

val allClasses = (outputPath ##) ** "*.class"

使用该路径查找器和“compileClasspath”顶级方法,您可以构建一个这样的任务,它将使用当前项目的类路径运行gcj,并将所有.class文件组合成一个gcjFile:

val gcj = "/usr/local/bin/gcj"
val gcjFile = "target/my_executable.o"

val allClasses = (outputPath ##) ** "*.class"

lazy val gcjCompile = execTask {
  <x>{gcj} --classpath={compileClasspath.get.map(_.absolutePath).mkString(":")}  -c {allClasses.get.map(_.absolutePath).mkString("-c ")} -o {gcjFile}</x>
} dependsOn(compile) describedAs("Create a GCJ executable object")