运行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进行编译?
答案 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变量,并在需要时返回到之前的状态。
首先安装virtualenvwrapper( virtualenv 的包装器):
$ apt-get install virtualenvwrapper
现在使用Scala-2.11为Java8创建一个虚拟环境。
$ mkvirtualenv j8s11
现在,调整 〜/ .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/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
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是必要的。