2015-05-04 128 views
1

嗨,大家好,我很新的Java。來自.NET,C++。我試圖讓我頭腦發熱,因爲幾天以來一直在使我失望,我無法修復它。Java的Socket.IO缺少依賴NoClassDefFoundError

我得到這個錯誤,當我嘗試運行我的.jar文件

java.lang.NoClassDefFoundError: com/github/nkzawa/emitter/Emitter$Listener 

我不知道還有什麼需要,或者爲什麼它不加載engine.io客戶端。

任何幫助表示讚賞。

編輯:

崩潰的代碼部分:

socket = IO.socket("http://blah.com:1234"); 
    socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() 
    { 

    // ... 

    }); 

的pom.xml

<dependency> 
     <groupId>com.github.nkzawa</groupId> 
     <artifactId>socket.io-client</artifactId> 
     <version>0.5.0</version> 
    </dependency> 

是否有任何其他的方式來確保這些依賴關係隨最終罐子文件,所以我沒有最終用戶的機器上的依賴性問題?

+1

我們可以看到,導致該錯誤的代碼?只是足以重現這個問題。 –

+1

你爲什麼用Maven標記這個?你在使用Maven嗎?如果是這樣,它有助於發佈你聲明你的依賴的pom部分,因爲這顯然是運行時缺少依賴的問題。 PS:我會放下eclipse標籤;您使用Eclipse的事實與您提出的問題幾乎沒有任何關係。 – Gimby

+0

是的,我正在使用maven。我也更新了我的答案。 – Azarus

回答

1

當你編譯C++代碼時,你必須給編譯器一個你的代碼依賴的(共享)庫列表。在Java中,您可以指定添加到「classpath」中的JAR列表。與C++不同,Java允許在編譯代碼後更改類路徑。所以你可以添加額外的元素或刪除現有的元素。在C++中,你通常可以替換磁盤上的DLL文件,但是你需要特殊的技巧來讓你的代碼加載更多的DLL或者忘記它所鏈接的DLL。

這會導致所有類似的奇怪問題,例如您現在體驗到的問題:Eclipse爲您構建類路徑,一切都很正常。您將項目導出爲可執行JAR,並且突然間,您必須執行許多繁瑣的工作才能複製IDE中的單擊按鈕。

獲取類路徑最簡單的方法是在IDE中啓動程序,切換到Debug透視圖並檢查Eclipse創建的進程的屬性。它將顯示它構建的Java命令行。這不是一個美麗的景象。

將所有內容複製到.cmd文件中並使用它來啓動您的應用程序。

您也可以使用Maven創建具有多種選擇如何處理依賴可執行的JAR:How can I create an executable JAR with dependencies using Maven?

+0

順便說一下,我用IntelliJ構建JAR文件花了5分鐘。我發現日食使用痛苦。即使你幫忙清除了一些東西。再次感謝您的幫助! :) – Azarus

3

顯然缺少一個圖書館。互聯網搜索將收益

<dependency> 
    <groupId>com.github.nkzawa</groupId> 
    <artifactId>engine.io-client</artifactId> 
    <version>0.4.1</version> 
</dependency> 

然後檢查最新版本here。 應該對你的其他依賴關係給予nzaza。

1

當我看着pom file時,看到了這個工件所具有的許多依賴關係。只要提到這個pom就會讓maven下載這些依賴關係,但是除非你構建了一個依賴jar的jar包,否則它們將不會被包含在你的構建中。

1

我用插座-io的以下版本:

<dependency> 
    <groupId>io.socket</groupId> 
    <artifactId>socket.io-client</artifactId> 
    <version>0.8.2</version> 
</dependency> 

我有以下依賴性增加運行時得到這個工作。

<dependency> 
    <groupId>io.socket</groupId> 
    <artifactId>engine.io-client</artifactId> 
    <version>0.8.2</version> 
</dependency> 
<dependency> 
    <groupId>com.squareup.okhttp3</groupId> 
    <artifactId>okhttp-ws</artifactId> 
    <version>3.4.1</version> 
</dependency> 
<dependency> 
    <groupId>com.squareup.okio</groupId> 
    <artifactId>okio</artifactId> 
    <version>1.11.0</version> 
</dependency> 

參考pom.xml文件,以找出依賴性: