【问题标题】:Netbeans 11.3 and Java 14 Preview FeaturesNetbeans 11.3 和 Java 14 预览功能
【发布时间】:2020-07-02 13:31:42
【问题描述】:

我使用 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 运行时仅识别类文件版本 58.65535 的预览功能

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

【问题讨论】:

  • 虽然我可以复制您的问题,但当我从命令行使用javap 检查类文件的版本时,我得到minor version: 65535 major version: 58,这是我所期望的。您如何确定您的类文件确实是 57 版?
  • 我也用过javap。不知何故,问题消失了——我想我重新启动了我的机器或其他“修复”它的东西;我不知道我的 Netbeans 安装是否使用了我之前安装的某些设置,或者什么... 真的很奇怪,因为我的系统上没有安装 Java 13。我想我永远不会真正知道发生了什么。但感谢您的意见!

标签: java netbeans java-14


【解决方案1】:

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

但是,这并不能解决问题,不幸的是,这看起来像是 NetBeans 11.3 的错误。我用 Java with Ant 项目重现了您的问题,并创建了错误报告 NETBEANS-4049 UnsupportedClassVersionError when running JDK14 code with --enable-preview

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

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

如果您仍有问题,请更新您的问题并提供更多详细信息。

【讨论】:

  • 我确实设置了选项 --enable-preview。我收到的错误消息说它只能从编译到 Java 14(主要版本 58)的类文件中执行预览功能。感谢您的反馈!
  • 对。但是,如果我将 Properties > Sources > Source/Binary/Format 设置为 JDK 13,那么 clean/build I(正确)会得到 error: invalid source release 13 with --enable-preview (preview language features are only supported for release 14)。如果删除--enable-preview,并使用JDK 13 编译,我(正确)得到error: switch expressions are not supported in -source 13。无论我多么努力,NetBeans 都不允许我做错事!所以我很困惑你的类文件有major version 57(即JDK 13)。我无法复制您的问题。
  • 这很奇怪......但正如我上面提到的,它似乎已经解决了。我认为这可能更像是我的 Ubuntu 盒子的环境问题。 :shrug: 感谢您对我的问题的帮助和关注。
【解决方案2】:

Netbeans 项目配置 (Java 14)

  • Java 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>

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多