POI 3.8与dbunit 2.4.9不兼容

时间:2013-08-16 11:08:51

标签: java maven compilation apache-poi dbunit

我们在申请中使用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重新编译它的内容。如何重新编译呢?

2 个答案:

答案 0 :(得分:2)

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. 中的步骤操作
  6. 如果在构建过程中测试失败,您可以尝试使用mvn -DskipTests=true package
  7. 跳过它们

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

答案 1 :(得分: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编译和安装。< / p>

默认情况下,oracle的配置文件被激活,这必须有oracle jdbc驱动程序,可以在本地仓库中禁用或安装,如上所述。

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