2015-05-04 126 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文件,以找出依赖性: