【问题标题】:Setting up sbt to use Java 7 for compilation?设置 sbt 以使用 Java 7 进行编译?
【发布时间】:2011-12-03 20:10:37
【问题描述】:

我在运行 compile 任务时遇到编译错误,因为源引用了 java.nio.file 包中仅出现在 Java 7 中的新类。

我在build.sbt中有以下内容:

javaHome := Some(file("/opt/jdk/jdk1.7.0"))

fork := true

在 sbt 中:

> show java-home
[info] Some(/opt/jdk/jdk1.7.0)

它在 Eclipse 中编译并运行良好。如何设置 sbt 以使用 Java 7 进行编译?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    目前最可靠的(也许是唯一的)方法是在 JDK7 文件夹中使用 java 启动 SBT。

    修改您的sbt 启动器脚本;或使用this one,它允许您将Java Home(以及更多!)指定为命令行选项。

    ~/code/scratch/20111009 sbt -java-home /Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home
    Starting sbt: invoke with -help for other options
    [info] Loading global plugins from /Users/jason/.sbt/plugins
    [info] Set current project to default-3e990a (in build file:/Users/jason/code/scratch/20111009/)
    > console
    [info] Compiling 1 Scala source to /Users/jason/code/scratch/20111009/target/scala-2.9.1/classes...
    [info] Starting scala interpreter...
    [info] 
    Welcome to Scala version 2.9.1.final (OpenJDK 64-Bit Server VM, Java 1.7.0-internal).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> java.util.Objects.equals(null, null)
    res0: Boolean = true
    

    只需设置javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home")) 更改用于编译和派生进程的Java 版本,但不会更改类路径上Java 标准库的版本,也不会更改用于运行测试的版本,它们始终运行相同的JVM作为 SBT。

    【讨论】:

    • windows10sbt-0.13 我用 cmd /C "set JAVA_HOME=c:\apps\jdk1.7.0_80&& sbt" 做到了。不要在 && 之前添加空格,因为它们会影响 JAVA_HOME 变量。
    • 9年后还是这样吗?有没有类似于 Gradle 最近发布的 toolchain 支持,您可以在其中指定用于在构建脚本本身内编译的 Java 版本?
    【解决方案2】:

    如果您使用 Linux 或 Mac,另一种可能是查看jenv,一个命令行 Java 管理器。

    它允许您为每个项目选择要使用的 JDK。

    【讨论】:

    • 我猜有人修复了链接
    【解决方案3】:

    我使用 virtualenv,它是 Python 生态系统中的一个工具。简而言之,它是一个 shell 脚本,可让您轻松更改 PATH 变量并在需要时恢复到以前的状态。

    1. 首先安装 virtualenvwrapper(一个围绕 virtualenv 的包装器):

      $ apt-get install virtualenvwrapper

    2. 现在使用 Scala-2.11 为 Java8 创建一个虚拟环境。

      $ mkvirtualenv j8s11

    3. 现在,调整 ~/.virtualenvs/j8s11/bin/postactivate 以便为所有工具定义位置。您可以在下面看到一个适合我的示例:

    #!/bin/bash JAVA_VERSION=1.8.0_31 SCALA_VERSION=2.11.5 SBT_VERSION=0.13.7 ANT_VERSION=1.9.4 M2_VERSION=3.2.5 GRADLE_VERSION=1.6 PLAY_VERSION=2.3.7 ACTIVATOR_VERSION=1.2.12 IDEA_VERSION=IC-135.475 PYCHARM_VERSION=community-3.4.1 TOOLS_HOME=/opt/开发者 导出 JAVA_HOME=${TOOLS_HOME}/jdk${JAVA_VERSION} 导出 SCALA_HOME=${TOOLS_HOME}/scala-${SCALA_VERSION} 导出 SBT_HOME=${TOOLS_HOME}/sbt-${SBT_VERSION} 导出 ANT_HOME=${TOOLS_HOME}/apache-ant-${ANT_VERSION} 导出 M2_HOME=${TOOLS_HOME}/apache-maven-${M2_VERSION} 导出 GRADLE_HOME=${TOOLS_HOME}/gradle-${GRADLE_VERSION} 导出 PLAY_HOME=${TOOLS_HOME}/play-${PLAY_VERSION} 导出 ACTIVATOR_HOME=${TOOLS_HOME}/activator-${ACTIVATOR_VERSION} 导出 IDEA_HOME=${TOOLS_HOME}/idea-${IDEA_VERSION} 导出 PYCHARM_HOME=${TOOLS_HOME}/pycharm-${PYCHARM_VERSION} PATH=${PYCHARM_HOME}/bin:$PATH PATH=${IDEA_HOME}/bin:$PATH PATH=${ACTIVATOR_HOME}:$PATH PATH=${PLAY_HOME}:$PATH PATH=${GRADLE_HOME}/bin:$PATH PATH=${M2_HOME}/bin:$PATH PATH=${ANT_HOME}/bin:$PATH PATH=${SBT_HOME}/bin:$PATH PATH=${SCALA_HOME}/bin:$PATH PATH=${JAVA_HOME}/bin:$PATH 导出路径
    1. 现在您可以使用 workon 在环境之间切换。示例:
    rgomes@terra:~$ 工作在 j8s11 (j8s11)rgomes@terra:~$ java -version java版本“1.8.0_31” Java(TM) SE 运行时环境 (build 1.8.0_31-b13) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.31-b07,混合模式) (j8s11)rgomes@terra:~$ scala -version Scala 代码运行器版本 2.11.5 -- 版权所有 2002-2013,LAMP/EPFL (j8s11)rgomes@terra:~$ 工作在 j7s10 (j7s10)rgomes@terra:~$ java -version java版本“1.7.0_71” Java(TM) SE 运行时环境 (build 1.7.0_71-b14) Java HotSpot(TM) 64 位服务器 VM(内部版本 24.71-b01,混合模式) (j7s10)rgomes@terra:~$ scala -version Scala 代码运行器版本 2.10.4 -- 版权所有 2002-2013,LAMP/EPFL

    【讨论】:

      【解决方案4】:

      我假设您想更改默认情况下在 JAVA_HOME 中设置的任何内容,您可以在调用 sbt 时执行此操作:

      JAVA_HOME=<path-to-jdk-home> sbt
      

      这适用于我在 sbt 0.13.8 的 OSX 上

      【讨论】:

        【解决方案5】:

        将 javacOption 更改为 1.7?我认为没有必要设置 javaHome。

        【讨论】:

          猜你喜欢
          • 2017-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-18
          • 2020-07-16
          • 1970-01-01
          • 2011-01-24
          • 1970-01-01
          相关资源
          最近更新 更多