设置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,如果需要,可以恢复到以前的状态。
-
首先安装virtualenvwrapper(一个关于virtualenv的包装):
$ apt-get install virtualenvwrapper
-
现在使用Scala-2.11为Java8创build一个虚拟环境。
$ mkvirtualenv j8s11
-
现在,调整〜/ .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
- 现在,您可以使用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是必要的。