RuntimeException: пакет jdk.internal.jimage.decompressor в модуле jrt.fs и модуле java.base

Детали компонентов - Использование IntelliJ IDEA 2017.1 CE и jdk-9-ea + 154

main () -

Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);

module-info.java

module collection {
    requires java.base;
}

Журналы -

Error occurred during initialization of VM
java.lang.RuntimeException: Package jdk.internal.jimage.decompressor in both module jrt.fs and module java.base
    at jdk.internal.module.ModuleBootstrap.fail(java.base@9-ea/ModuleBootstrap.java:699)
    at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:329)
    at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)

Сомневаюсь в реализации инициализации VM, мой вопрос в том, что я не включил модуль jrt.fs - Откуда это идет на картинке? Как отладить такие модули включения / исключения? Как мне в дальнейшем разрешить текущее исключение?

10 ответов

Решение

$JAVA_HOME/lib/jrt-fs.jar содержит копию поставщика файловой системы "jrt", скомпилированного в JDK 8. Он предназначен для таких инструментов, как IDE, которые работают в JDK 8, но нуждаются в доступе к образу времени выполнения JDK 9.

Из этого исключения получается, что этот файл JAR, или, возможно, $JAVA_HOME/lib, был ошибочно помещен в путь модуля. JAR-файлы, которые не содержат module-info.class в каталоге верхнего уровня, обрабатываются как автоматические модули, поэтому в сообщении исключение содержит "module jrt.fs". Исключение в основном просто означает, что вы получили два модуля, содержащие пакет jdk.internal.jimage.decompressor (и многие другие пакеты), из-за того, что jrt-fs.jar указан в пути к модулю.

У меня такая же ошибка под Arch linux. Пакет java-openjfx устанавливает свои библиотеки в каталог lib openjdk, что, похоже, вызывает проблемы. Я нашел обходной путь, добавив вместо этого не весь каталог lib, а только необходимые библиотеки.

В Project Structure > Libraries > + > Java > /usr/lib/jvm/default/lib > выберите необходимые библиотеки (удерживая ctrl), должны выглядеть примерно так

Затем в Run Configurations установите соответствующие параметры виртуальной машины --module-path /usr/lib/jvm/java-14-openjdk/lib/javafx.base.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.controls.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.graphics.jar --add-modules=javafx.controls

Для моего проекта было достаточно добавить только элементы управления в качестве модуля, но для его запуска требовались путь к базе и графика.

У меня была такая же проблема с Manjaro Linux, хотя она отлично работала в Windows. Глядя на различия, стало ясно, что пакет javafx 11 устанавливается в /lib/jvm/java-11-openjdk/lib, который я затем установил как PATH_TO_FX. Кажется, это проблема, потому что jrt-fs.jar находится в той же папке.

Я переместил все файлы из fx в отдельную папку, а затем установил для нее PATH_TO_FX. Теперь работает нормально.

Чтобы решить эту проблему, выполните следующие действия. 1- Щелкните правой кнопкой мыши свой класс. 2 - Run AS-> Run Configurations 3. Нажмите main -> нажмите кнопку Browse и выберите имя проекта в проекте. Нажмите кнопку "Применить", а после обработки нажмите кнопку "Выполнить".

В Eclipse у меня сработало изменение рабочего пространства Eclipse или удаление папки.metadata в папке рабочего пространства.

Я не знаю, что это исправило, но если мне нужно было предположить, что это могло быть что-то в папке.metadata, вызвавшее исключение.

Попробуйте удалить jrt-fs.jar из каталога jdk9. Я сделал это в структуре проекта в IntelliJ IDEA, и она отлично работает для меня

Я столкнулся с этой проблемой для Spring Toolsuite 4, метаданные содержат информацию о текущих проектах в рабочей области и общие настройки eclipse, такие как шрифт, стиль кода, параметры конфигурации запуска и иногда информацию об используемых модулях, плагинах eclipse и файле журнала eclipse для ошибок журнала eclipse, так далее.

Он не содержит ценной информации о проекте.

Если эта папка удалена или изменена вручную, eclipse увидит в ней новую рабочую область. Вам нужно снова импортировать существующие проекты, и все готово.

Если вы хотите сохранить свои шрифты, стиль кода и т. Д., Вы можете экспортировать / импортировать эти настройки для новых рабочих областей или создать резервную копию.metadata.

В моем случае это сработало для вышеуказанной проблемы с пакетом jdk.internal.jimage.decompressor в модуле jrt.fs и модуле java.base, когда я удалил папку .metadata, снова импортирую проект, настроил конфигурацию запуска и все начало работать.

Удалите папку.metadata, затем перезапустите eclipse.

У меня была такая же проблема с версией Mac Eclipse: 2020-09 (4.17.0)

Всякий раз, когда я пытался запустить существующую конфигурацию, я получал эту ошибку. Я пробовал всевозможные обходные пути, но ничего не помогло.

Итак, я создал новую конфигурацию:

  1. Откройте файл, содержащий метод main().
  2. В меню "Выполнить" выберите "Запуск от имени >> Java-приложение".

Все прошло нормально. Преимущество этого заключается в том, что он не изменяет вашу установку JDK.

Удаление .metadataпапка в workspaceпапка у меня работает.

(Я использую Windows с Eclipse 2021-06 (4.20.0))

Другие вопросы по тегам