Scala 在SBT中保存编译器生成的所有文件
我目前正在为我用Scala编写的领域特定语言(DSL)开发一个编译器插件。因此,我在repo中有一个“examples”目录(SBT子项目),其中包含一个使用DSL编写的示例程序。我可以很好地编译这个子项目,并且它按照预期工作 我的插件分析这个示例程序并生成一个输出文件(通过简单地写入文件生成)。我已经为相同的“示例”目录创建了一个新的子项目。它有特殊的命令行选项,指示编译器使用插件。一切运行正常,但尽管进行了多次搜索,我仍然无法找出输出文件的生成位置。我怀疑它被扔掉了 下面是我的Scala 在SBT中保存编译器生成的所有文件,scala,sbt,Scala,Sbt,我目前正在为我用Scala编写的领域特定语言(DSL)开发一个编译器插件。因此,我在repo中有一个“examples”目录(SBT子项目),其中包含一个使用DSL编写的示例程序。我可以很好地编译这个子项目,并且它按照预期工作 我的插件分析这个示例程序并生成一个输出文件(通过简单地写入文件生成)。我已经为相同的“示例”目录创建了一个新的子项目。它有特殊的命令行选项,指示编译器使用插件。一切运行正常,但尽管进行了多次搜索,我仍然无法找出输出文件的生成位置。我怀疑它被扔掉了 下面是我的build.s
build.sbt
:
lazy val commonSettings = Seq(
organization := "com.bitbucket.bitstream-dsl",
scalaVersion := "2.12.6"
)
lazy val root = (project in file("."))
.settings(
commonSettings,
version := "0.1.0-SNAPSHOT",
name := "example-project"
)
lazy val examples = (project in file("examples"))
.settings(
commonSettings,
name := "examples"
)
.dependsOn(root)
lazy val examplesPlugin = (project in file("examples"))
.settings(
commonSettings,
scalacOptions += "-Xplugin:plugin/target/scala-2.12/plugin_2.12-0.1-SNAPSHOT.jar",
name := "examples_plugin",
target := baseDirectory.value / "target-plugin",
publishArtifact in Compile := true
)
.dependsOn(root)
lazy val plugin = (project in file("plugin"))
.settings(
commonSettings,
scalacOptions += "-J-Xss256m",
name := "plugin",
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
)
.dependsOn(root)
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value
以下是我如何将内容写入文件:
def printFile(funcBody: String) : Unit = {
// open a file to be written
val file = new File("test.v")
val bw = new BufferedWriter(new FileWriter(file))
bw.write(funcBody + "\n")
//close the output file
bw.close()
}
“通过简单写入文件生成”的代码是什么?我在问题的底部添加了一个新的代码部分,在
val file=…
行之后添加println(file.getCanonicalPath)
查看它在哪里结束如果我手动测试编译器插件,这会起作用,但是SBT似乎会抑制插件的任何控制台输出。也许SBT的最后一个
命令会有所帮助?