【问题标题】:POI 3.8 incompatible with dbunit 2.4.9POI 3.8 与 dbunit 2.4.9 不兼容
【发布时间】:2013-08-16 11:08:51
【问题描述】:

我们在应用程序中使用 POI 3.8。我们的项目正在使用 dbunit 从 .xls 文件中加载数据集,显然 dbunit 与 POI 3.8 不兼容。我得到以下异常,

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFDateUtil.isCellDateFormatted(Lorg/apache/poi/hssf/usermodel/HSSFCell;)Z 

似乎 dbunit 需要 POI 3.2。但是我不能降级我的 POI 版本。有没有办法解决这个问题。在一篇文章中,我阅读了有关下载 dbunit 源代码并针对 poi 3.8 重新编译它的信息。如何进行这种重新编译?

【问题讨论】:

标签: java maven compilation apache-poi dbunit


【解决方案1】:

http://sourceforge.net/p/dbunit/bugs/332/ 的dbunit-bugtracker 上对此进行了一些讨论,不幸的是那里还没有更新,所以dbunit 本身似乎还不支持这个。

我能够通过以下步骤针对较新的 Apache POI 版本重新编译 dbunit:

  1. 通过 http://dbunit.svn.sourceforge.net/svnroot/dbunit/tags/dbunit-2.4.9 查看 dbunit 代码 svn co http://dbunit.svn.sourceforge.net/svnroot/dbunit/tags/dbunit-2.4.9
  2. 调整 pom.xml 以将 poi 依赖项设置为仅 3.9-FINAL 在较新版本中已删除
  3. 运行mvn package
  4. 如果由于缺少 oracle-jar 导致编译失败,请按照https://stackoverflow.com/a/18042525/411846 的步骤操作
  5. 如果测试在构建过程中失败,您可以尝试使用mvn -DskipTests=true package 跳过它们

生成的二进制文件位于target/dbunit-2.4.9.jar

【讨论】:

【解决方案2】:

我已经检查了这里的 pom 文件 http://sourceforge.net/p/dbunit/code.git/ci/master/tree/dbunit/

它仍然是 apache poi 的版本是 3.2。不幸的是,这个版本已经有 5 年历史了,它的功能比 3.9 少,例如 Formatter 和用于某些类(如 Row)的不同包。

根据centic的建议,我已经克隆了git repo,现在dbunit的版本是2.4.10-SNAPSHOT,我已经更改了apache poi版本,编译并安装了选项-Dmaven.test.skip=true。

默认情况下,oracle 的配置文件被激活,这必须具有 oracle jdbc 驱动程序,可以按照上面的建议禁用或安装在本地 repo 中。

所有测试都和以前一样顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2020-03-11
    • 2018-07-04
    • 2020-10-27
    • 2013-03-14
    • 2016-07-09
    • 2020-10-31
    相关资源
    最近更新 更多