jxls 2.5使用jxls-poi-1.0.12的兼容性

时间:2019-02-14 08:50:28

标签: gradle apache-poi jxls

我正在使用jxls-poi-1.0.12。 在发布jxls 2.5之后,gradle会将jxls自动更新为2.5。对于结果,运行JxlsHelper.getInstance()。processTemplate(context,Transformer)时出现异常

java.lang.AbstractMethodError: org.jxls.transform.poi.PoiTransformer.adjustTableSize(Lorg/jxls/common/CellRef;Lorg/jxls/common/Size;)V
at org.jxls.command.EachCommand.applyAt(EachCommand.java:262)
at org.jxls.area.XlsArea.applyAt(XlsArea.java:172)
at org.jxls.command.EachCommand.processCollection(EachCommand.java:296)
at org.jxls.command.EachCommand.applyAt(EachCommand.java:255)
at org.jxls.area.XlsArea.applyAt(XlsArea.java:172)

我检查了jxls 2.5更新。我发现在运行EveryCommand时,jxls 2.5向转换器接口添加了AdjustTableSize()方法。但是,PoiTransformer尚未实现此方法,因此出现了此错误。这意味着jxls 2.5与jxls-poi-1.0.12不兼容。

当然,我可以升级我的Poi,但需要很多时间。可以降级我的jxls或禁用其运行Transformer.adjustTableSize()吗?

这是我的build.gradle

compile group: 'org.jxls', name: 'jxls-jexcel', version: '1.0.6'
compile group: 'org.jxls', name: 'jxls-poi', version: '1.0.12'
compile group: 'org.jxls', name:'jxls', version :'2.4.0'

3 个答案:

答案 0 :(得分:2)

要能够将Jxls 2.5.0与Apache POI一起使用,您必须切换到实现了Transformer.adjustTableSize()的jxls-poi 1.1.0

如果您不想使用最新的POI版本,则可以尝试将其从jxls-poi依赖项中排除,并使用旧的POI版本,但是,如果POI版本之间的API发生重大更改,则可能无法正常工作。

更新16.02.2019: Jxls 2.5.1版本现已发布。 此版本应与jxls-poi 1.0.x版本向后兼容,因此,当该版本在Maven Central中可用时,该问题将消失。

答案 1 :(得分:1)

上面所说的是有道理的,但这不是很正确

compile("org.jxls:jxls-poi:1.0.15"){
        transitive = false
    }
compile("org.jxls:jxls:2.4.0")

答案 2 :(得分:0)

我们今天遇到了同样的问题。 经过调查,我们找到了解决方法。所以请让我分享。

请尝试如下更改gradle.build。

compile ("org.jxls:jxls-poi:1.0.12"){
    transitive = false
  }

更改后,gradle将忽略jxls-poi指定的依赖项。

请详细参阅文档。 (本文档适用于gradle 4.10,但是我们测试了gradle 3.x) https://docs.gradle.org/4.10/userguide/managing_transitive_dependencies.html#sub:disabling_resolution_transitive_dependencies


这是因为jxls-poi的版本设置。这是POI的依赖版本要求规范。

  • 1.0:对1.0的“软”要求(如果与其他所有依赖项相匹配,则只是一个建议)
  • [1.0]:1.0的“硬”要求
  • (,1.0]:x <= 1.0
  • [1.2,1.3]:1.2 <= x <= 1.3
  • [1.0,2.0):1.0 <= x <2.0
  • [1.5,):x> = 1.5
  • (,1.0],[1.2,):x <= 1.0或x> = 1.2;多组以逗号分隔
  • (,1.1),(1.1,):不包括1.1(例如,如果已知无法与该库配合使用)

https://maven.apache.org/pom.html#Dependency_Version_Requirement_Specification

因此,org.jxls:jxls:[2.4.0,)表示使用2.4.0或更高版本。

# this is the part of result of gradle dependencies command.
...
+--- org.jxls:jxls-poi:1.0.12
|    |    +--- org.jxls:jxls:[2.4.0,) -> 2.5.0 (*)
...

一旦排除了jxls-poi的设置,jxls的版本将更改为指定的版本。

之前

|    +--- org.jxls:jxls:2.4.0 -> 2.5.0 (*)

之后(已解决)

|    +--- org.jxls:jxls:2.4.0 (*)