嗨,大家好我对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文件一起提供,所以我在最终用户的计算机上没有依赖性问题?
答案 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
文件以确定依赖关系: