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

标签 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版本发生了变化,并尝试重新编译所有内容,因此由于第一个问题而引发编译错误。

    怎么说服sbt运行我已经编译的项目,尽管使用不同的 JVM?使用 assembly不是一种选择,因为这需要几分钟,而且我需要经常这样做。

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

    最佳答案

    您可以使用 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 .

    Forking有关更多详细信息,请参阅 SBT 文档的部分。

    关于scala - Sbt:使用 Java 6 编译并使用 Java 7 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955771/

    相关文章:

    scala - 在scala中警告或避免整数除法(导致截断)

    linux - Jenkins 和 chalice : Error initializing VM

    java - Android Studio 错误 : "Environment variable does not point to a valid JVM installation"

    scala - 从 Scala IDE 使用 SBT

    scala - 将 Scala 从 2.12 降级到 2.11.x

    java - 使用 SBT 从另一个 jar 读取 ManifestAttributes

    scala - IntelliJ Play2 和 Scala 插件不兼容。使 IntelliJ 12 不再按预期工作

    scala - 删除 DAO 模型中的可选字段

    memory - scala邮箱大小限制

    jvm - 入侵java.lang.Object : calling custom external class crashes JVM