2011-06-30 17 views
0

をMavenの、私は私のメインクラスをコンパイルするためにFSCデーモンを使用するように管理しています、この前の回答Fastest way to compile scala with mavenScalaのFSCとテストのソースファイルをコンパイルし、MavenのScalaのプラグインを使用して

のおかげでしかし、これは動作しません。テストソースファイル用。私はテストコンパイルフェーズのためにmavenの実行を追加することができますが、私はccの目標を指定すると、src/mainクラス(速いが間違ったクラス)をコンパイルします。 compileTestゴールを指定すると、標準のコンパイラ(正しいクラスだが遅い)を使ってsrc/testクラスをコンパイルします。

私には何が欠けていますか?

...いくつかの進歩があり、私が以下に投稿した回答で報告されています。

しかし..これは、コンパイルサーバーが起動していないことを示しています。 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 

そして、それを実行するには、

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) 

提案は歓迎MainGenericRunner.errファイルにこのエラーを取得します。.. !

答えて

4

SBTの使用を検討してください。

それはMavenのとは違って、あなただけの何を再コンパイル(追跡依存のサポートを有効にするトリッキーな手動で設定する必要はありません

(すなわち、物事をスピードアップするために周りの「温かい」コンパイラを保つ)FSCのすべての利点を持っていますあなたは本当に必要があります)。

FSCとは異なり、それはまた、あなたのパスにインストールされているのScalaのバージョンにあなたを結ぶせず、誤って設定ホスト名(および他の類似の問題)に直面して破損しない

+0

私たちの主な理由は、我々が持っているということです混合言語プロジェクト - scala、java、およびC. SBTは、しかし、適用するのに役立つツールかもしれません。 – AndyT

+0

親プロジェクトからのものを継承する必要がある場合は、はい、Mavenボックスからの脱退は特に困難です。そうしないと、SBTはMavenのアーティファクトを共有リポジトリに完全に公開することができ、POMを正しく生成することさえできます。 –

0

詳しい調査の結果、このソリューションを作成しました:C-C「速い」/テスト/ Scalaのディレクトリに対する目標をコンパイルを実行します

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

:CC目標とアップ固定メインソースパスと新しい実行を追加します。 (デフォルト)/ main/scalaではなく

これは、これを行うための最良の方法ですか?

1

私は同じでした問題、他のソリューションがどのように働いたことのmaven-のScala - プラグインのスナップショットのバージョンを使用していた、正しく問題を解決していない、または適切ではありませんでしたでした:Mavenを使用するための

 <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> 
関連する問題