使用Jackcess Encrypt会导致Cobertura出现“NoClassDefFoundError”exception

我正在尝试用一个非常简单的程序读取带有jet编码的mdb文件。

import java.io.File; import java.io.IOException; import com.healthmarketscience.jackcess.CryptCodecProvider; import com.healthmarketscience.jackcess.Database; import com.healthmarketscience.jackcess.DatabaseBuilder; import com.healthmarketscience.jackcess.Row; import com.healthmarketscience.jackcess.Table; public class ReadFile { public static void main(String[] args) { // TODO Auto-generated method stub try { File myDbFile = new File("C:\\Users\\jcace\\Downloads\\TSC\\DB1.mdb"); Database db = new DatabaseBuilder(myDbFile) .setCodecProvider(new CryptCodecProvider()) .open(); Table table = db.getTable("VBV"); for(Row row : table) { System.out.println("Look ma, a row: " + row); } } catch (IOException e){ e.printStackTrace(); } } } 

我有以下图书馆附加内容

  • 共享记录-1.2 \共享记录-1.2.jar
  • 共享记录-1.2 \共享记录-1.2-javadoc.jar
  • 公共琅2.6 \公地郎2.6.jar
  • jackcess-加密-2.1.2.jar
  • hamcrest核-1.3.jar
  • 基于JUnit 4.11.jar
  • jackcess-2.1.0.jar
  • bcprov-jdk15on-1.49.jar

当我运行程序时,我有以下错误

 Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/TouchCollector at com.healthmarketscience.jackcess.CryptCodecProvider.__cobertura_init(CryptCodecProvider.java) at com.healthmarketscience.jackcess.CryptCodecProvider.(CryptCodecProvider.java) at HelloWorld.main(HelloWorld.java:17) Caused by: java.lang.ClassNotFoundException: net.sourceforge.cobertura.coveragedata.TouchCollector at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3 more 

我尝试使用以下Bouncy crypt库

  • bcprov-jdk15on-157.jar
  • bcprov-jdk15on-152.jar
  • bcprov-jdk15on-151.jar
  • bcprov-jdk15on-150.jar
  • bcprov-jdk15on-149.jar

最后我解决了我的问题,通过jackcess-encrypt-2.1.0.jar更改库jackcess-encrypt-2.1.2.jar。

我不知道为什么,但这使我有可能完成这项工作。

应该在jackcess-encrypt 2.1.3版本中修复。