Невозможно запустить приложение JavaFX, использующее Apache POI
У меня есть приложение JavaFX, которое работает должным образом. Мне нужно использовать Apache POI для чтения и записи файлов Excel. Ниже приведены шаги, которые я предпринял:
Добавлена необходимая зависимость
implementation 'org.apache.poi:poi-ooxml:5.2.3'
Добавлен модуль в module-info.java
requires org.apache.poi.ooxml;
Пытался использовать библиотеку внутри функции:
@FXML
private void downloadTemplate() {
XSSFWorkbook workbook = new XSSFWorkbook();
}
Все это нормально без вопросов. Однако, когда я пытаюсь запустить приложение, я получаю следующие две ошибки (перемена)
> Task :Start.main() FAILED
Error occurred during initialization of boot layer
java.lang.module.FindException: Module SparseBitSet not found, required by org.apache.poi.ooxml
и
> Task :Start.main() FAILED
Error occurred during initialization of boot layer
java.lang.module.FindException: Module commons.math3 not found, required by org.apache.poi.ooxml
Однако я ясно вижу обе библиотеки в разделе «внешние библиотеки».
Я использую IntelliJ Community Edition 2022.1.2 и запускаю проект с использованием Java 17.0.1. Любая помощь будет высоко оценен.
1 ответ
Используя приведенный выше ответ , я смог решить проблему. Я публикую ответ здесь, чтобы помочь всем, кто столкнется с проблемой в будущем.
Итак, общая проблема заключается в том, что, как сказано в ответе выше, и SparseBitSet , и commons-math3 являются автоматическими модулями без собственной информации о модулях . Решение, которое сработало для меня, состояло в том, чтобы преобразовать их в модули, ожидаемые проектом. Вот шаги, которые я предпринял:
Используйте плагин gradle «extra-java-module-info» . Страница github не показала, как импортировать ее в обычный файл gradle, так что вот она:
plugins { id 'org.gradlex.extra-java-module-info' version '1.0' }
Обратите внимание на имена, которые ваше приложение ожидает для модулей. В моем случае из сообщений об ошибках это были «SparseBitSet» и «commons-math3».
Найдите указанные библиотеки на боковой панели в разделе «внешние библиотеки» и обратите внимание на имена файлов «jar». В моем случае это были «commons-math3-3.6.1.jar» и «SparseBitSet-1.2.jar» .
Добавить раздел
'extraJavaModuleInfo'
в ваши файлы gradle и используйте параметры следующим образом:module('jar file name', 'name expected by your project', 'jar version')
, как показано в синем прямоугольнике на изображении выше.extraJavaModuleInfo { module('commons-math3-3.6.1.jar', 'commons.math3', '3.6.1') module('SparseBitSet-1.2.jar', 'SparseBitSet', '1.2') }
Вот и все. Попробуйте синхронизировать и запустить свой проект. Спасибо, user1155209 .