0

如果我有一个中小型 SBT Scala(使用 Akka)项目,并且想查看 scalac 的脱糖输出,我将如何执行此操作?

我找到了一些用于显示小函数或类文件的参考,但这些示例没有使用外部类(即导入)。我想看看我的 ScalaTest 中的一个函数是去糖的,但是有这么多的依赖项,一个简单的scala -print myFile.scala函数不起作用。

关于如何做到这一点的想法将不胜感激。

4

2 回答 2

2

使用 SBT 0.13,您可以导出命令行以从命令行运行 scala 编译器,并在类路径上具有所有正确的依赖项:

> compile
[info] Compiling 2 Scala sources to /Users/jason/code/scratch3/target/scala-2.10/classes...
[success] Total time: 1 s, completed Oct 31, 2013 7:28:50 PM
> export compile
scalac -bootclasspath /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/jsfd.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/ui.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/laf.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/sunrsasign.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/jsse.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/jce.jar:/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Classes/charsets.jar:/Users/jason/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.3.jar -classpath /Users/jason/code/scratch3/target/scala-2.10/classes:/Users/jason/.ivy2/cache/org.scalacheck/scalacheck_2.10/jars/scalacheck_2.10-1.10.1.jar:/Users/jason/.ivy2/cache/org.scala-tools.testing/test-interface/jars/test-interface-0.5.jar:/Users/jason/.ivy2/cache/org.scala-lang/scala-actors/jars/scala-actors-2.10.1.jar /Users/jason/code/scratch3/src/main/scala/Exercise.scala /Users/jason/code/scratch3/src/main/scala/Test.scala

您可以接受它,将其删除您感兴趣的文件,然后添加-print或类似。

我曾经将其自动化,因此您可以在 SBT 中使用新命令执行此操作compile-quick

https://github.com/retronym/scratch/blob/master/20111022/project/CompileQuickPlugin.scala https://github.com/retronym/scratch/blob/master/20111022/sbt.log

但我还没有检查这是否适用于当前的 SBT 版本。

于 2013-10-31T18:33:54.730 回答
1

我的 hack 是一般编译它,然后使用 jd-gui 反编译它。有时会搞砸,但可以帮助我了解 99% 的糖分。

于 2013-10-31T19:41:08.770 回答