Sbt:使用Java 6编译并使用Java 7运行

时间:2014-02-22 14:40:25

标签: scala jvm sbt

我有一个使用Swing的Scala 2.10.3项目。我有以下catch-22情况:

  • 我必须针对Java 6进行编译,因为Scala Swing无法使用Java 7
  • 我必须使用Java 7运行该项目,因为Linux上的OpenJDK 6已损坏(与各种Swing组件崩溃)

我可以用

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

但是当我尝试跑步时:

$ sbt run

sbt表示JVM版本发生了变化,并尝试重新编译所有内容,从而因第一个问题而抛出编译错误。

如果使用不同的JVM,我如何说服sbt运行已编译的项目?使用assembly不是一种选择,因为这需要几分钟,我需要做很多事情。


我也尝试使用export JAVA_HOME切换,但这有同样的效果,sbt会尝试重新编译run

2 个答案:

答案 0 :(得分:7)

您可以使用范围为run任务的javaHome key来控制运行时使用的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部分。

答案 1 :(得分:0)

这是一种可能的解决方案:该项目是使用IntelliJ IDEA开发的。

  • 无论如何,IDEA在JDK 7上运行
  • 使用IDEA的第三方sbt插件。
  • 在文件中 - >设置 - > SBT(第三方),找到“IDE Settings”,选中“Use alternative JRE”并在此处选择JDK 6.
  • 现在可以使用集成的sbt控制台编译项目,因为sbt是使用JDK 6启动的
  • 使用标准IDEA运行配置运行项目,使用“启动前:运行SBT操作'测试:产品'”。 IDEA将使用JDK 7
  • 启动该项目