2014-02-22 89 views
4

我有一個使用Swing的Scala 2.10.3項目。我有以下的22條軍規情況:Sbt:使用Java 6編譯並使用Java 7運行

  • 我必須編譯在Java 6,因爲Scala的搖擺不使用Java 7個工作
  • 我必須運行在Java 7中的項目,因爲OpenJDK的6 Linux是一個錯誤的破壞(各種Swing組件崩潰)

我可以

$ sbt -java-home /usr/lib/jvm/java-6-openjdk-amd64/ test:products 

編譯但是當我嘗試運行:

$ sbt run 

sbt表示JVM版本發生變化,並嘗試重新編譯所有內容,因此由於第一個問題而引發編譯錯誤。

我該如何說服sbt運行我已經編譯過的項目,儘管使用了不同的JVM?使用assembly不是一種選擇,因爲這需要幾分鐘的時間,我需要做很多。


我也嘗試使用export JAVA_HOME切換,但是這有相同的效果,SBT將嘗試在run重新編譯。

回答

7

您可以使用javaHome key項目,作用域爲run任務,以控制運行時,JDK使用。

假設你用JDK6運行SBT,如:

sbt -java-home /usr/lib/jvm/java-6-openjdk-amd64/ 

javaHome添加在您的build.sbt自定義位置:

// no custom Java_HOME without forking 
fork in run := true 

// your JDK7 install 
javaHome in run := Some(file("/usr/lib/jvm/java-7-openjdk-amd64/")) 

compile程序將使用JDK6,並run JDK7。您還可以刪除上述定義中的in run,以使其適用於runtest

有關更多詳細信息,請參閱SBT文檔的Forking部分。

0

下面是一個可能的解決方案:該項目是用IntelliJ IDEA開發的。

  • IDEA的JDK 7上運行反正
  • 使用第三方sbt插件的IDEA。
  • 在文件 - >設置 - > SBT(第三方)中,找到「IDE Settings」,選中「Use alternative JRE」並選擇JDK 6。
  • 由於使用JDK 6啓動sbt,現在可以使用集成的sbt控制檯編譯該項目。使用「啓動前:運行SBT操作」test:products'「,使用標準IDEA運行配置運行項目。 IDEA將推出使用JDK 7
相關問題