对于一个项目,我们需要创建一个 .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')
在后端模块中,我们必须使用Spring Tools创建API,并使用ojdbc8
与Oracle数据库进行通信以持久存储信息。来自数据库的数据需要写入excel文件,为什么在backend.gradle
的依赖项中拥有
compile project(':excel')
...
compile('com.oracle.jdbc:ojdbc8:12.2.0.1')
excel 项目通过TemplateBuilderAdapter
在后端中使用,该项目采用数据库表示形式,并在TemplateBuilder
上调用相应的方法。
在 excel 模块内的.write(OutputStream stream)
上的Apache POI XSSFWorkbook
上调用TemplateBuilder
时,创建的文件应为原样。另一方面,当在.write(OutputStream stream)
上调用TemplateBuilderAdapter
时,仅将其传递给TemplateBuilder
,则文件已损坏。
鉴于通过编译ojdbc8
从XSSFWorkbook when written creates a corrupted .xlsx document in Spring Boot application using JDBC得出的推论,类路径最终会更改Apache POI使用的XML解析器,从而导致Excel文件损坏。我们试图对 excel 项目的所有依赖项使用胖的 .jar 文件,但这没有运气。
在不更改 excel 项目中使用的所有内容的类路径的情况下,如何在后端项目中使用 excel 项目?而且,如果我们必须重新指定导入 ojdbc8 后要清理的类路径,是否有人对导致冲突的原因有任何想法?