3

我们在应用程序中使用 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 重新编译它的信息。如何重新编译?

4

2 回答 2

3

在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-dependency 设置为 just 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

于 2013-08-23T08:59:58.300 回答
1

我在这里检查了 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 中。

所有测试都像以前一样顺利进行。

于 2014-02-01T11:09:58.130 回答