设置sbt以使用Java 7进行编译?

时间:2011-10-09 05:46:50

标签: scala sbt

运行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进行编译?

5 个答案:

答案 0 :(得分:46)

在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标准库的版本,也不会更改用于运行测试的版本,这些版本始终运行与SBT相同的JVM。

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

  1. 首先安装virtualenvwrapper( virtualenv 的包装器):

    $ apt-get install virtualenvwrapper

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

    $ mkvirtualenv j8s11

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

  4. #!/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/developer
    export JAVA_HOME=${TOOLS_HOME}/jdk${JAVA_VERSION}
    export SCALA_HOME=${TOOLS_HOME}/scala-${SCALA_VERSION}
    export SBT_HOME=${TOOLS_HOME}/sbt-${SBT_VERSION}
    export ANT_HOME=${TOOLS_HOME}/apache-ant-${ANT_VERSION}
    export M2_HOME=${TOOLS_HOME}/apache-maven-${M2_VERSION}
    export GRADLE_HOME=${TOOLS_HOME}/gradle-${GRADLE_VERSION}
    export PLAY_HOME=${TOOLS_HOME}/play-${PLAY_VERSION}
    export ACTIVATOR_HOME=${TOOLS_HOME}/activator-${ACTIVATOR_VERSION}
    export IDEA_HOME=${TOOLS_HOME}/idea-${IDEA_VERSION}
    export 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
    export PATH
    
    1. 现在您可以使用 workon 在环境之间切换。例如:
    2. rgomes@terra:~$ workon j8s11
      
      (j8s11)rgomes@terra:~$ java -version
      java version "1.8.0_31"
      Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
      Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
      (j8s11)rgomes@terra:~$ scala -version
      Scala code runner version 2.11.5 -- Copyright 2002-2013, LAMP/EPFL
      
      (j8s11)rgomes@terra:~$ workon j7s10
      
      (j7s10)rgomes@terra:~$ java -version
      java version "1.7.0_71"
      Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
      (j7s10)rgomes@terra:~$ scala -version
      Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL
      

答案 3 :(得分:2)

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

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

这适用于我在OSX上使用sbt 0.13.8

答案 4 :(得分:-2)

将javacOption更改为1.7?我不认为设置javaHome是必要的。