首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用scala、fsc和maven编译测试源文件

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

Stack Overflow用户
提问于 2011-06-30 11:14:23
回答 3查看 1.4K关注 0票数 0

通过使用maven scala插件,我正在设法使用fsc守护进程编译我的主要类,这要感谢前面的答案Fastest way to compile scala with maven

但是,这并不适用于测试源文件。我可以为测试编译阶段添加maven执行,但是如果我指定cc目标,它会编译src/main类(快速,但错误的类)。如果我指定了compileTest目标,它使用标准编译器编译src/test类(正确的类,但速度慢)。

我遗漏了什么?

..。已经取得了一些进展,我在下面发布的答复中对此进行了报道。

但是,..--这表明编译服务器没有启动。看来,scala.tools.nsc.MainGenericRunner类在类路径上找不到scala.tools.nsc.CompileServer。现在我知道它在java类路径中,就像在提供MainGenericRunner的同一个jar文件中一样,但是我是否需要以某种方式指定一个“用户”类路径?

由maven插件运行以启动CompileServer的命令如下所示:

代码语言:javascript
复制
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文件中获得此错误。

代码语言:javascript
复制
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)

欢迎提出建议!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-30 17:05:18

您可能想考虑使用SBT。

它具有FSC的所有优点(即保持一个“温暖”的编译器来加快速度)

与maven不同,您不需要复杂的手动配置来支持依赖跟踪(只需要重新编译真正需要的内容)。

与fsc不同,它也不会将您与安装在path上的scala版本联系在一起,并且不会在配置错误的主机名(以及其他类似的问题)面前崩溃。

票数 4
EN

Stack Overflow用户

发布于 2012-05-08 11:52:40

我也有同样的问题,其他的解决方案没有正确地解决问题,或者不合适,有效的是使用maven-scala的快照版本:

代码语言:javascript
复制
        <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>
票数 1
EN

Stack Overflow用户

发布于 2011-06-30 14:42:05

进一步研究产生了这个解决方案:添加一个具有cc目标和固定的主源路径的新执行:

代码语言:javascript
复制
    <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目录而不是(默认) /main/scala运行cc 'fast‘编译目标。

这是最好的/唯一的办法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6533858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档