Java Socket.IO缺少依赖性NoClassDefFoundError

时间:2015-05-04 13:12:47

标签: java maven

嗨,大家好我对java很新。来自.NET,C ++。我试图让我的头脑过去,因为自从几天以来一直在杀死我,我无法修复它。

当我尝试运行.jar文件时出现此错误

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

我不知道它还需要什么,或者为什么它没有加载engine.io-client。

任何帮助表示感谢。

编辑:

代码崩溃部分:

    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>

有没有其他方法可以确保这些依赖项随最终jar文件一起提供,所以我在最终用户的计算机上没有依赖性问题?

4 个答案:

答案 0 :(得分:3)

显然缺少图书馆。互联网搜索将产生

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

然后检查最新版本here。 应该与你对nkzawa的其他依赖性略有一致。

答案 1 :(得分:1)

当我查看pom file时,我看到了这个工件所具有的许多依赖项。只是提到这个pom将使maven下载这些依赖项,但除非你正在构建一个带有依赖项的jar,否则它们不会包含在你的构建中。

答案 2 :(得分: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?

答案 3 :(得分:1)

我正在使用socket-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文件以确定依赖关系: