Невозможно запустить приложение JavaFX, использующее Apache POI

У меня есть приложение JavaFX, которое работает должным образом. Мне нужно использовать Apache POI для чтения и записи файлов Excel. Ниже приведены шаги, которые я предпринял:

  1. Добавлена ​​необходимая зависимость

    implementation 'org.apache.poi:poi-ooxml:5.2.3'

  2. Добавлен модуль в module-info.java

    requires org.apache.poi.ooxml;

  3. Пытался использовать библиотеку внутри функции:

      @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 являются автоматическими модулями без собственной информации о модулях . Решение, которое сработало для меня, состояло в том, чтобы преобразовать их в модули, ожидаемые проектом. Вот шаги, которые я предпринял:

  1. Используйте плагин gradle «extra-java-module-info» . Страница github не показала, как импортировать ее в обычный файл gradle, так что вот она:

            plugins {
           id 'org.gradlex.extra-java-module-info' version '1.0'
    }
    
  2. Обратите внимание на имена, которые ваше приложение ожидает для модулей. В моем случае из сообщений об ошибках это были «SparseBitSet» и «commons-math3».

  3. Найдите указанные библиотеки на боковой панели в разделе «внешние библиотеки» и обратите внимание на имена файлов «jar». В моем случае это были «commons-math3-3.6.1.jar» и «SparseBitSet-1.2.jar» .

  4. Добавить раздел'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 .

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