Возможности предварительной версии 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.


person Rintoul    schedule 21.03.2020    source источник
comment
Хотя я могу воспроизвести вашу проблему, когда я проверяю версию своего файла класса с помощью javap из командной строки, я получаю minor version: 65535 major version: 58, чего я и ожидал. Как вы определяете, что ваши файлы классов действительно имеют версию 57?   -  person skomisa    schedule 22.03.2020
comment
Я также использовал javap. Как-то проблема ушла - кажется, я перезагрузил машину или что-то еще исправило; Я не знаю, использовала ли моя установка Netbeans какие-то настройки из моей предыдущей установки или что ... Это действительно странно, потому что в моей системе не установлена ​​Java 13. Думаю, я никогда не узнаю, что происходит. Но спасибо за ваш вклад!   -  person Rintoul    schedule 23.03.2020


Ответы (3)


Помимо настройки --enable-preview в качестве параметра компилятора, он также должен быть установлен как параметр виртуальной машины при запуске кода:

введите описание изображения здесь

Однако это не решает проблему, и, к сожалению, это похоже на ошибку NetBeans 11.3. Я воспроизвел вашу проблему в проекте Java with Ant и создал отчет об ошибке NETBEANS-4049 UnsupportedClassVersionError при запуске кода JDK14 с --enable-preview.

Есть несколько обходных путей, если вам нужно использовать функции предварительной версии с JDK 14 в NetBeans:

  • Запустите приложение из командной строки (с параметром --enable-preview) вместо NetBeans. Тот же код, который не работает с UnsupportedClassVersionError в NetBeans, отлично работает в этой среде, что убедительно свидетельствует о том, что NetBeans игнорирует параметр времени выполнения --enable-preview.
  • Создайте проект Java с Maven вместо проекта Java с Ant. Затем вы можете запустить свой код, который использует функции предварительного просмотра в NetBeans.

Обновите свой вопрос, указав более подробную информацию, если у вас все еще есть проблемы.

person skomisa    schedule 21.03.2020
comment
Я установил параметр --enable-preview. В полученном мной сообщении об ошибке говорилось, что он может выполнять функции предварительного просмотра только из файлов классов, скомпилированных для Java 14 (основная версия 58). Спасибо за ваш отзыв! - person Rintoul; 24.03.2020
comment
Правильно. Но если я установлю Свойства ›Источники› Источник / Двоичный / Формат на JDK 13, то при очистке / сборке я (правильно) получу 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). Я не могу воспроизвести вашу проблему. - person skomisa; 24.03.2020
comment
Это было странно ... но, как я уже упоминал выше, похоже, это само собой сработало. Я думаю, что с моим Ubuntu это могло быть больше связано с окружающей средой. : shrug: Спасибо за помощь и внимание к моему вопросу. - person Rintoul; 25.03.2020

Конфигурация проекта 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
  • Проверить сборку- ›плагины-› плагин - ›...-› 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>

person Felix Aballi    schedule 28.07.2020

nb-javac не должен устанавливаться (он появляется в плагинах).

Если он установлен в 11.3, создается впечатление, что он создает файлы классов с версией 57, а не 58, против которых среда выполнения возражает, как указано выше.

person chris.bailey    schedule 28.04.2020