Возможности предварительной версии Netbeans 11.3 и Java 14
Я использую Java 14 в качестве платформы Java по умолчанию для Netbeans 11.3 (для 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.
4 ответа
Конфигурация проекта 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>
Помимо настройки --enable-preview в качестве параметра компилятора, он также должен быть установлен в качестве параметра виртуальной машины при запуске кода:
Однако это не решает проблему, и, к сожалению, это похоже на ошибку NetBeans 11.3. Я воспроизвел вашу проблему с проектом Java с Ant и создал отчет об ошибке NETBEANS-4049 UnsupportedClassVersionError при запуске кода JDK14 с --enable-preview.
Есть несколько обходных путей, если вам нужно использовать функции предварительной версии с JDK 14 в NetBeans:
- Запустите приложение из командной строки (с параметром --enable-preview), а не из NetBeans. Тот же код, который не работает с UnsupportedClassVersionError в NetBeans, отлично работает в этой среде, что убедительно свидетельствует о том, что NetBeans игнорирует параметр времени выполнения --enable-preview.
- Создайте проект Java с Maven вместо проекта Java с Ant. Затем вы можете запустить свой код, который использует функции предварительного просмотра в NetBeans.
Обновите свой вопрос, указав более подробную информацию, если у вас все еще есть проблемы.
Я пытаюсь это сделать с Netbeans 15. Я хочу использовать API-интерфейс стороннего компоновщика, и завершение кода говорит:
MemoryAddress — это предварительная версия API, которая по умолчанию отключена. (используйте --enable-preview, чтобы включить предварительный просмотр API)
Это относится к предварительным версиям JDK 19 и JDK 20. Я поставил вариант в
Nb -javac не должен устанавливаться (он появляется в плагинах).
Если он установлен в 11.3, создается впечатление, что он создает файлы классов с версией 57, а не 58, против которых среда выполнения возражает, как указано выше.