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, снова импортирую проект, настроил конфигурацию запуска и все начало работать.
У меня была такая же проблема с версией Mac Eclipse: 2020-09 (4.17.0)
Всякий раз, когда я пытался запустить существующую конфигурацию, я получал эту ошибку. Я пробовал всевозможные обходные пути, но ничего не помогло.
Итак, я создал новую конфигурацию:
- Откройте файл, содержащий метод main().
- В меню "Выполнить" выберите "Запуск от имени >> Java-приложение".
Все прошло нормально. Преимущество этого заключается в том, что он не изменяет вашу установку JDK.
Удаление
.metadata
папка в
workspace
папка у меня работает.
(Я использую Windows с Eclipse 2021-06 (4.20.0))