如何确定jXLS 2.3.0需要哪个版本的apache POI?

时间:2016-05-13 14:18:41

标签: apache-poi jxls

这是我的Gradle文件:

compile 'org.apache.poi:poi:3.13'
compile 'org.jxls:jxls-jexcel:1.0.6'
compile 'org.jxls:jxls-poi:1.0.9'
compile 'org.jxls:jxls:2.3.0'

看起来我正在使用错误版本的apache POI:

java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.getCellStyleAt(S)Lorg/apache/poi/ss/usermodel/CellStyle;
at org.jxls.transform.poi.PoiTransformer.clearCell(PoiTransformer.java:224)
at org.jxls.area.XlsArea.clearCells(XlsArea.java:437)
at org.jxls.builder.xls.XlsCommentAreaBuilder.build(XlsCommentAreaBuilder.java:181)
at org.jxls.template.SimpleExporter.gridExport(SimpleExporter.java:54)

我必须明确包含另一个依赖所依赖的依赖项,这有点奇怪吗?此外,我如何确定我实际需要哪个版本的依赖项(POI)?

我只是想让简单的导出器示例工作:

   try (InputStream is = CalXlsExporter.class.getResourceAsStream(template)) {
        try (OutputStream os2 = new FileOutputStream("ExportOutput.xlsx")) {

            headers = Arrays.asList(HEADERS);

            Context context = new Context();
            context.putVar("headers", HEADERS);
            context.putVar("cell", cal);

            JxlsHelper.getInstance().processTemplate(is, os2, context); //Exception inside this
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:2)

您可以随时查看jxls-poi模块的Maven pom文件,例如,您可以看到jxls-poi-1.0.9包含对pom属性部分中定义的POI 3.12的依赖

<properties>
  ...
  <poi.version>3.12</poi.version>
  ...  
</properties>

以后的POI版本也可能会起作用,但情况并非总是如此,因为它依赖于Apache POI向后兼容性。

答案 1 :(得分:1)

我会尝试简单地删除文件中POI的依赖关系,因为jxls会将正确版本的POI作为传递依赖项拖动,所以你只需要总是依赖于应用程序中的jxls,未来的更新不会导致类似奇怪的错误。