使用scala fsc和maven编译测试源文件

时间:2011-06-30 11:14:24

标签: scala maven

使用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)

建议欢迎..!

3 个答案:

答案 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

这是最佳/唯一的方法吗?