2017-06-02 52 views
1

我有複製粘貼官方DropBox API教程的以下代碼。此代碼的目的是上傳文本文件。我正在使用DropBox-core-sdk-3.0.3.jar。但我正在逐漸使用DropBox核心API時的NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonParseException 
    at com.dropbox.core.DbxHost.<clinit>(DbxHost.java:114) 
    at com.dropbox.core.v2.DbxClientV2.<init>(DbxClientV2.java:31) 
    at dropboxtest.Main.main(Main.java:24) 
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonParseException 
    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) 

現在解決這個可能,增加jackson-annotations.jar到類路徑,但是,我已經嘗試了這一點,這似乎並沒有工作,我也得到了同樣的異常,我有一些未使用的進口

下面是代碼:

package dropboxtest; 

import com.dropbox.core.DbxException; 
import com.dropbox.core.DbxRequestConfig; 
import com.dropbox.core.v2.DbxClientV2; 
import com.dropbox.core.v2.files.FileMetadata; 
import com.dropbox.core.v2.files.ListFolderResult; 
import com.dropbox.core.v2.files.Metadata; 
import com.dropbox.core.v2.users.FullAccount; 

import java.util.List; 

import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.IOException; 

public class Main { 

    private static final String ACCESS_TOKEN = "XXXXXX"; 

    public static void main(String args[]) throws DbxException, IOException { 
     // Create Dropbox client 
     DbxRequestConfig config = new DbxRequestConfig("dropbox/java-tutorial", "en_US"); 
     DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN); 

     // Get current account info 
     FullAccount account = client.users().getCurrentAccount(); 
     System.out.println(account.getName().getDisplayName()); 

     // Get files and folder metadata from Dropbox root directory 
     ListFolderResult result = client.files().listFolder(""); 
     while (true) { 
      for (Metadata metadata : result.getEntries()) { 
       System.out.println(metadata.getPathLower()); 
      } 

      if (!result.getHasMore()) { 
       break; 
      } 

      result = client.files().listFolderContinue(result.getCursor()); 
     } 

     // Upload "test.txt" to Dropbox 
     try (InputStream in = new FileInputStream("test.txt")) { 
      FileMetadata metadata = client.files().uploadBuilder("/test.txt") 
        .uploadAndFinish(in); 
     } 
    } 
} 
+0

不要依賴於IDE並自己運行它。檢查輸出JAR文件以確定'jackson-annotation-x.x.x.jar'的存在並確保該類絕對存在。請讓我知道,如果一切似乎正確。順便說一句,你應該粘貼關於你運行應用程序的方式和應用程序的類路徑的更多細節。否則,很難看到發生了什麼問題。 –

+0

您指出了正確的方向。我實際上必須使用'jackson-core-2.xx'而不是'jackson-annotation-xx.xx.' DropBox忘記在他們的文檔中提及它,或者我是一個真正的新手。我現在會回答我的問題。 –

回答

2

答案很簡單:使用jackson-core-x.x.x代替jackson-annotation-xxx

長的答案:正如Gemini Keith所指出的那樣,問題在於我的類路徑。 dropbox-core-sdk-3.0.3.jar實際上需要另一個庫,它是jackson-core-2.6.1。但是,DropBox for API v2官方文檔沒有提及這一點。但是在查看DropBox的API v1文檔時,並且在閱讀該行

必需的JAR文件位於「lib /」文件夾中。

我開始下載API v1示例代碼。然後從lib文件夾中添加jackson-core-x.x.x到當前類路徑和VIOLA,一切工作正常。

+1

我加了jackson-core-2.6.1,解決了我的問題,謝謝 –