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

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

我有build.sbt的以下build.sbt

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

在sbt:

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

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

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

修改你的sbt启动脚本; 或者使用这个允许你指定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标准的版本类path上的库,也不是用来运行testing的版本,它们总是运行与SBT相同的JVM。

如果你使用Linux或者Mac,另外一种可能性就是看一下命令行Javapipe理器jenv 。

它允许你select每个项目使用哪个JDK。

我使用virtualenv ,这是Python生态系统的一个工具。 简而言之,它是一个shell脚本,它允许您轻松地更改PATHvariables,如果需要,可以恢复到以前的状态。

  1. 首先安装virtualenvwrapper(一个关于virtualenv的包装):

    $ apt-get install virtualenvwrapper

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

    $ mkvirtualenv j8s11

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

 #!/斌/庆典

 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 =社区3.4.1

 TOOLS_HOME = /select/显影剂
导出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_VERSION}
导出ACTIVATOR_HOME = $ {TOOLS_HOME} / activator  -  $ {ACTIVATOR_VERSION}
导出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
导出PATH
  1. 现在,您可以使用workon在环境之间切换。 例:
 rgomes @ terra:〜$ workon j8s11

 (j8s11)rgomes @ terra:〜$ java -version
 java版本“1.8.0_31”
 Java(TM)SE运行时环境(build 1.8.0_31-b13)
 Java HotSpot(TM)64位服务器虚拟机(构build25.31-b07,混合模式)
 (j8s11)rgomes @ terra:〜$ scala -version
 Scala代码亚军版本2.11.5  - 版权2002-2013,LAMP / EPFL

 (j8s11)rgomes @ terra:〜$ workon j7s10

 (j7s10)rgomes @ terra:〜$ java -version
 java版本“1.7.0_71”
 Java(TM)SE运行时环境(build 1.7.0_71-b14)
 Java HotSpot(TM)64位服务器虚拟机(版本24.71-b01,混合模式)
 (j7s10)rgomes @ terra:〜$ scala -version
 Scala代码亚军版本2.10.4  - 版权2002-2013,LAMP / EPFL

我假设你想改变默认情况下在JAVA_HOME中设置的任何东西,你可以在调用sbt时执行:

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

这对OSX 0.13.8我的作品

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