首页 > 解决方案 > 如何设置 sbt 以使用 java 14 预览功能

问题描述

我有一个包含 Scala (2.13.1) 和 Java 文件的 sbt 项目。
我想使用 Java 14 编译 Java 文件,包括预览功能
我怎样才能做到这一点?

按照上面的 oracle 文档,我尝试设置 javaOptions + javacOptions:

javaOptions ++= Seq("--enable-preview"), // when running
javacOptions ++= Seq("--enable-preview", "--release", "14"), // when compiling

但是当我编译一个使用预览功能的简单 Java 文件时,例如:

package example;

public record Person(String name, Integer age) {}

我得到:

[错误] /Users/dvir/learn/playground/src/main/java/example/Person.java:3:15: 类型声明非法开始
[错误] 公共记录人(字符串名称,整数年龄){}
[错误] ^

注意:我在 Mac 上使用AdoptOpenJDK 14工作。
JAVA_HOME的是/Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
使用时,jshell我可以毫无问题地使用预览功能:

dvir@Mac ~/learn/playground$ jshell --enable-preview
|  Welcome to JShell -- Version 14.0.2
|  For an introduction type: /help intro

jshell> public record Person(String name, Integer age) {}
|  created record Person

jshell> var alice = new Person("alice", 20)
alice ==> Person[name=alice, age=20]

jshell>

当我注释掉 Person record(因此仅使用 java 14 中的标准功能,例如 switch 表达式)但保留javaOptionsandjavacOptions时,我仍然收到此警告:

[警告] 从类文件读取 API 时出错:example.MainJava:java.lang.UnsupportedClassVersionError:未启用预览功能,例如/MainJava(类文件版本 58.65535)。尝试使用“--enable-preview”运行

当我还注释掉javaOptionsandjavacOptions时,java 代码按预期编译和运行。

请注意,上面的编译器警告类似于此博客标题下的警告Forced To ––enable–preview At Run Time
警告和博客都建议添加––enable–preview,就像我一样。

如何设置 sbt 以使用 java 14 预览功能?

标签: javascalasbtjava-14

解决方案


推荐阅读