设置 sbt 以使用 Java 7 进行编译?
Posted
技术标签:
【中文标题】设置 sbt 以使用 Java 7 进行编译?【英文标题】:Setting up sbt to use Java 7 for compilation? 【发布时间】: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 中编译并运行良好。如何
【问题讨论】:
【参考方案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。
【讨论】:
在windows10
和 sbt-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 变量并在需要时恢复到以前的状态。
首先安装 virtualenvwrapper(一个围绕 virtualenv 的包装器):
$ apt-get install virtualenvwrapper
现在使用 Scala-2.11 为 Java8 创建一个虚拟环境。
$ mkvirtualenv j8s11
现在,调整 ~/.virtualenvs/j8s11/bin/postactivate 以便为所有工具定义位置。您可以在下面看到一个适合我的示例:
-
现在您可以使用 workon 在环境之间切换。示例:
【讨论】:
【参考方案4】:我假设您想更改默认情况下在 JAVA_HOME 中设置的任何内容,您可以在调用 sbt 时执行此操作:
JAVA_HOME=<path-to-jdk-home> sbt
这适用于我在 sbt 0.13.8 的 OSX 上
【讨论】:
【参考方案5】:将 javacOption 更改为 1.7?我认为没有必要设置 javaHome。
【讨论】:
以上是关于设置 sbt 以使用 Java 7 进行编译?的主要内容,如果未能解决你的问题,请参考以下文章
ScalaPB: 通用跨系统protobuf数据,sbt设置