2011-12-13 140 views
3

我打算從MS Access數據庫顯示數據,我正在使用Jackcess庫,但我得到一個依賴性錯誤,我不知道如何解決。這裏是我的代碼和錯誤:我如何解決java jackces依賴性錯誤?

import com.healthmarketscience.jackcess.*; 
import java.io.*; 
import java.util.*; 
import java.sql.*; 
import java.nio.*; 
import java.lang.*; 
import org.apache.commons.*; 
import org.apache.commons.lang3.builder.*; 
import org.apache.log4j.Logger; 
import org.apache.log4j.xml.DOMConfigurator; 

class Main { 
    private static Logger log=Logger.getLogger(Main.class); 
    public static void main(String args[]) { 
     DOMConfigurator.configure("lib\\log4j.xml"); 
     try { 

      Database d = Database.open(new File("lib\\ExTables.mdb")); 
      System.out.println(d.getTable("Cliente").display()); 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

這裏是我的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder 
    at com.healthmarketscience.jackcess.RowId.compareTo(RowId.java:108) 
    at com.healthmarketscience.jackcess.IndexData$Entry.compareTo(IndexData.java:1825) 
    at com.healthmarketscience.jackcess.IndexData$Entry.compareTo(IndexData.java:1637) 
    at java.util.Collections.indexedBinarySearch(Unknown Source) 
    at java.util.Collections.binarySearch(Unknown Source) 
    at com.healthmarketscience.jackcess.IndexData$DataPage.findEntry(IndexData.java:2347) 
    at com.healthmarketscience.jackcess.IndexData.findEntryPosition(IndexData.java:709) 
    at com.healthmarketscience.jackcess.IndexData.access$3100(IndexData.java:54) 
    at com.healthmarketscience.jackcess.IndexData$EntryCursor.updatePosition(IndexData.java:2118) 
    at com.healthmarketscience.jackcess.IndexData$EntryCursor.restorePosition(IndexData.java:2057) 
    at com.healthmarketscience.jackcess.IndexData$EntryCursor.restorePosition(IndexData.java:2040) 
    at com.healthmarketscience.jackcess.IndexData$EntryCursor.beforeEntry(IndexData.java:2002) 
    at com.healthmarketscience.jackcess.IndexCursor.findPotentialRow(IndexCursor.java:439) 
    at com.healthmarketscience.jackcess.IndexCursor.findRowByEntryImpl(IndexCursor.java:342) 
    at com.healthmarketscience.jackcess.IndexCursor.findRowByEntry(IndexCursor.java:175) 
    at com.healthmarketscience.jackcess.Database$DefaultTableFinder.findRow(Database.java:2239) 
    at com.healthmarketscience.jackcess.Database$TableFinder.findObjectId(Database.java:2168) 
    at com.healthmarketscience.jackcess.Database.readSystemCatalog(Database.java:1081) 
    at com.healthmarketscience.jackcess.Database.<init>(Database.java:765) 
    at com.healthmarketscience.jackcess.Database.open(Database.java:589) 
    at com.healthmarketscience.jackcess.Database.open(Database.java:535) 
    at com.healthmarketscience.jackcess.Database.open(Database.java:510) 
    at com.healthmarketscience.jackcess.Database.open(Database.java:488) 
    at com.healthmarketscience.jackcess.Database.open(Database.java:467) 
    at Main.main(Main.java:19) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.builder.CompareToBuilder 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 25 more 

這就是我的命令行:

C:\Programmi\Java\jre6\bin\javaw.exe -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:3280 -Dfile.encoding=Cp1252 -classpath "C:\Documents and Settings\linosa\Documenti\programmazione\workspace_java\MSAccess\bin;C:\Documents and Settings\linosa\Documenti\programmazione\workspace_java\MSAccess\lib\jackcess-1.2.5.jar;C:\Documents and Settings\linosa\Documenti\programmazione\workspace_java\MSAccess\lib\log4j-1.2.16.jar;C:\Documents and Settings\linosa\Documenti\programmazione\workspace_java\MSAccess\lib\commons-logging-1.1.1.jar;C:\Documents and Settings\linosa\Documenti\programmazione\workspace_java\MSAccess\lib\junit-4.10.jar;C:\Documents and Settings\linosa\Documenti\programmazione\commons-lang3-3.1-bin\commons-lang3-3.1\commons-lang3-3.1-tests.jar;C:\Documents and Settings\linosa\Documenti\programmazione\commons-lang3-3.1-bin\commons-lang3-3.1\commons-lang3-3.1.jar;C:\Documents and Settings\linosa\Documenti\programmazione\commons-lang3-3.1-bin\commons-lang3-3.1\commons-lang3-3.1-javadoc.jar;C:\Documents and Settings\linosa\Documenti\programmazione\commons-lang3-3.1-bin\commons-lang3-3.1\commons-lang3-3.1-sources.jar" Main 
+0

你的classpath中是否有所有必需的jar? CompareToBuilder屬於commons-lang。 – Andreas

+0

感謝您回答Andreas!我不確定!在apache庫中是commons-lang? – haltman

+0

Apache有很多發佈庫的項目。包含你的類的庫的名字是commons-lang- Andreas

回答

8

下議院郎3不與2.x的向後兼容你必須下載2.6。

您可能還想調查Maven或Ant + Ivy以使這種依賴關係解析更容易一些。

+0

謝謝artbristol!降級圖書館解決我的依賴問題,但我得到一個nullpointerexception,我要研究爲什麼...大聲笑 – haltman

2

發現它;-) commons lang在類路徑中,但它似乎是錯誤的版本。 請求的包是org.apache.commons.lang.builder,它對commons-lang3中的commons-lang 2.x有效,包是'org.apache.commons.lang3.builder'。所以你必須包含一個commons-lang 2.x

+0

感謝您的幫助安德烈亞斯! – haltman