Изоляция пути к классам между взаимозависимыми модулями gradle - PullRequest
0 голосов
/ 05 июля 2018

Для проекта нам нужно создать документ .xlsm excel, автоматически заполненный данными, введенными в наше приложение. Вся обработка документа Excel не зависит от остальной части бэкэнда, поэтому вся непосредственная обработка документа Excel переносится в его собственный модуль, и поэтому проект имеет следующую структуру

+ BaseFolder
|- settings.gradle
|- build.gradle
|
+--+ backend
|  |- backend.gradle
|  |- src
|
+--+ excel
   |- excel.gradle
   |- src

В модуле excel мы решили использовать Apache POI для заполнения файла шаблона .xlsm. Следовательно, excel.gradle имеет следующую зависимость

compile('org.apache.poi:poi-ooxml:3.17')

В модуле backend мы должны использовать Spring Tools для создания API и ojdbc8 для связи с базой данных Oracle для постоянного хранения информации. Эти данные из базы данных необходимо записать в файл Excel, поэтому в зависимостях backend.gradle мы имеем

compile project(':excel')
...
compile('com.oracle.jdbc:ojdbc8:12.2.0.1')

Проект excel используется в бэкэнде - TemplateBuilderAdapter, который принимает представление базы данных и вызывает соответствующие методы для TemplateBuilder.

Когда в Apache POI XSSFWorkbook вызывается .write(OutputStream stream) из TemplateBuilder внутри модуля excel , файл создается так, как и должно быть. С другой стороны, когда .write(OutputStream stream) вызывается на TemplateBuilderAdapter, который просто передает его TemplateBuilder, файл поврежден.

С учетом вычета из XSSFWorkbook при записи создает поврежденный документ .xlsx в приложении Spring Boot, используя JDBC путем компиляции ojdbc8, путь к классу заканчивается изменением синтаксического анализатора XML, используемого Apache POI, что приводит к поврежденные файлы Excel. Мы пытались использовать толстый .jar файл со всеми зависимостями проекта excel , но это не повезло.

Как мы можем использовать проект excel в проекте backend без изменения пути к классу всего, что используется в проекте excel ? И если нам потребуется заново указать путь к классу для очистки после импорта ojdbc8 , есть ли у кого-нибудь идеи относительно того, где и почему возникает конфликт?

...