使用maven scala插件,我正在设法使用fsc守护进程来编译我的主要类,这要归功于之前的回答Fastest way to compile scala with maven
但是,这不适用于测试源文件。我可以为测试 - 编译阶段添加maven执行,但是如果我指定cc目标,它会编译src / main类(快速但错误的类)。如果我指定了compileTest目标,它会使用标准编译器编译src / test类(正确的类,但速度很慢)。
我错过了什么?
......我已经在下面发布的答案中报告了一些进展。
然而.. 这表明Compile服务器没有启动。似乎scala.tools.nsc.MainGenericRunner
类未能在类路径上找到scala.tools.nsc.CompileServer
。现在我知道它在java类路径中,因为它在提供MainGenericRunner
的同一个jar文件中,但我是否需要以某种方式指定'用户'类路径?
通过maven插件运行以启动CompileServer的命令如下所示:
cmd.exe /C C:\Progra~1\Java\jdk1.7.0\jre\bin\java -classpath
C:\projects\m2\repository\org\scala-lang\scala-library\2.9.0-1\scala-library-2.9.0-1.jar;C:\projects\m2\repository\org\scala-lang\scala-compiler\2.9.0-1\scala-compiler-2.9.0-1.jar
-Xbootclasspath/a:C:\projects\m2\repository\org\scala-lang\scala-library\2.9.0-1\scala-library-2.9.0-1.jar
scala.tools.nsc.MainGenericRunner
scala.tools.nsc.CompileServer
-target:jvm-1.5 -unchecked
>C:\Users\...\AppData\Local\Temp\scala.tools.nsc.MainGenericRunner.out
2>C:\Users\...\AppData\Local\Temp\scala.tools.nsc.MainGenericRunner.err
运行它会在MainGenericRunner.err文件中出现此错误
Exception in thread "main" java.lang.RuntimeException: Cannot figure out how to run target: scala.tools.nsc.CompileServer
at scala.sys.package$.error(package.scala:27)
at scala.tools.nsc.GenericRunnerCommand.scala$tools$nsc$GenericRunnerCommand$$guessHowToRun(GenericRunnerCommand.scala:38)
at scala.tools.nsc.GenericRunnerCommand$$anonfun$2.apply(GenericRunnerCommand.scala:48)
at scala.tools.nsc.GenericRunnerCommand$$anonfun$2.apply(GenericRunnerCommand.scala:48)
at scala.Option.getOrElse(Option.scala:109)
at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:48)
at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:17)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:33)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
建议欢迎..!
答案 0 :(得分:4)
您可能需要考虑使用SBT。
它具有FSC的所有优点(即保持“热情”编译器以加快速度)
与maven不同,您不需要棘手的手动配置来启用依赖关系跟踪支持(仅重新编译您真正需要的内容)。
与fsc不同,它也不会将您绑定到路径上安装的scala版本,并且不会因配置错误的主机名(以及其他类似问题)而中断
答案 1 :(得分:1)
我遇到了同样的问题,其他解决方案没有正确解决问题,或者说不合适,有效的方法是使用maven-scala-plugin的快照版本:
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.3-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-unchecked</arg>
<arg>-deprecation</arg>
<arg>-explaintypes</arg>
</args>
</configuration>
</plugin>
答案 2 :(得分:0)
进一步调查产生了这个解决方案:添加一个具有cc目标和固定主源路径的新执行:
<execution>
<id>cc-compiletest</id>
<phase>test-compile</phase>
<goals>
<goal>cc</goal>
</goals>
<configuration>
<mainSourceDir>${project.build.sourceDirectory}/../../test/scala</mainSourceDir>
<useFsc>true</useFsc>
<once>true</once>
<displayCmd>true</displayCmd>
</configuration>
</execution>
对/ test / scala目录运行cc'fast'编译目标而不是(默认)/ main / scala
这是最佳/唯一的方法吗?