繁体   English   中英

Netbeans 11.3 和 Java 14 预览功能

[英]Netbeans 11.3 and Java 14 Preview Features

我使用 Java 14 作为 Netbeans 11.3 的默认 Java 平台 .netbeans_jdkhome 设置为我的 Java 14 JDK)并尝试在简单的 Java 应用程序中使用预览功能。 我将源级别设置为 14,并将 --enable-preview 设置为编译器参数。 代码编译没有错误。

但是,当我尝试在 Netbeans 内运行它时,它会抱怨 .class 文件的主要版本是 57,而运行时只能很好地处理 58 个文件和预览功能。 这是错误:

java.lang.UnsupportedClassVersionError:javaapplicationtest14/JavaApplicationTest14(类文件版本 57.65535)使用不受支持的预览功能编译。 此版本的 Java 运行时仅识别 class 文件版本 58.65535 的预览功能

我检查了 .class 文件的主要版本,它们确实是 57。为什么我的项目不能编译成 Java 14 级的任何想法? 我正在使用 Ant 版本。

除了将--enable-preview设置为编译器选项外,还应在运行代码时将其设置为VM 选项

在此处输入图片说明

但是,这并不能解决问题,不幸的是,这看起来像是 NetBeans 11.3 的错误。 我使用带有 Ant项目的Java重现了您的问题,并在使用 --enable-preview 运行 JDK14 代码时创建了错误报告NETBEANS-4049 UnsupportedClassVersionError

如果您需要在 NetBeans 中使用 JDK 14 的预览功能,有几种解决方法:

  • 从命令行(使用--enable-preview作为选项)而不是在 NetBeans 中运行您的应用程序。 在 NetBeans 中因UnsupportedClassVersionError而失败的相同代码在该环境中运行良好,这强烈表明 NetBeans 忽略了--enable-preview运行时选项。
  • 创建一个Java with Maven项目,而不是一个Java with Ant项目。 然后,您可以运行使用 NetBeans 中的预览功能的代码。

如果您仍有问题,请使用更多详细信息更新您的问题。

Netbeans 项目配置(Java 14)

  • 爪哇 14
  • Netbeans >= 11(当前:12.0 LTS)

可选

可以使用sdkman或设置默认 java 路径:

  /opt/<jdk-install-dir>
C:\Program Files\<jdk-install-dir>

项目“运行”配置

项目运行配置

Java平台

构建/编译

pom.xml

笔记

  • 检查 maven.compiler.source / maven.compiler.target
  • 检查 build->plugins->plugin->...-> compilerArgs -> arg
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>Demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>14</maven.compiler.source>
        <maven.compiler.target>14</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>--enable-preview</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

不应安装 nb-javac(它出现在插件中)。

如果它安装在 11.3 中,它似乎会创建版本为 57 而不是 58 的类文件,然后运行时会反对,如上所述。

我正在用 Netbeans 15 尝试这个。我想使用外国 linker API,代码完成是说:

MemoryAddress 是一个预览 API,默认情况下是禁用的。 (使用 --enable-preview 启用预览 API)

这适用于 JDK 19 和 JDK 20 预览版。 我将--enable-preview选项放在pom.xml中,它没有任何改变。 如果我go到project properties/Build/Compile,有选项可以选择哪个JDK但是没有办法进入JDK选项。 似乎 NetBeans 提示推荐--enable-preview但实际上没有办法做到这一点。 这是 NB 中的错误还是我遗漏了什么? 非常令人沮丧,因为我想使用其中的一些功能,而且我正在花时间尝试让我的代码编辑器工作。 我认为这在以前的 NB 版本中确实有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM