jxls 2.5 совместимость для использования jxls-poi-1.0.12 - PullRequest
0 голосов
/ 14 февраля 2019

Я использую jxls-poi-1.0.12.После выпуска jxls 2.5, gradle auto обновил 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 голосов
/ 15 февраля 2019

Мы столкнулись с той же проблемой сегодня.После расследования мы нашли способ ее решить.поэтому позвольте мне поделиться.

Пожалуйста, попробуйте изменить 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 </li>
  • [1,2,1,3]: 1,2 <= x <= 1,3 </li>
  • [1,0,2,0): 1,0 <= x <2,0 </li>
  • [1,5,): x> = 1,5
  • (, 1,0], [1,2,): х <= 1,0 или х> = 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 (*)
0 голосов
/ 15 февраля 2019

То, что было сказано выше, имеет смысл, но не совсем верно

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

0 голосов
/ 14 февраля 2019

Чтобы иметь возможность использовать Jxls 2.5.0 с Apache POI, вам нужно переключиться на jxls-poi 1.1.0, в котором реализован Transformer.adjustTableSize ().

Если вы не хотите использоватьПоследняя версия POI. Вы можете попытаться исключить ее из зависимостей jxls-poi и использовать более старую версию POI, однако это может не сработать, если между версиями POI произошли критические изменения API.

Обновление 16.02.2019: Выпущена версия Jxls 2.5.1.Эта версия должна быть обратно совместима с версиями jxls-poi 1.0.x, поэтому проблема должна исчезнуть, когда версия станет доступной в Maven Central.

...