ClassNotFoundException - 没有意义

时间:2012-01-30 21:16:04

标签: java class jar

一般资料

我正在使用Bukkit的API为Minecraft开发一个插件。 我必须使用Apache Commons .NET库。

问题

运行JAR后,我收到一个ClassNotFoundException。

决议(已解决)

我手动制作了我的MANIFEST.MF文件(将其设置为在导出JAR时使用我的自定义文件)并将其放入其中:

Manifest-Version: 1.0
Class-Path: libs/commons-net-3.0.1.jar

像魅力一样工作。


我做了什么

我在插件中的Project Explorer中创建了一个文件夹,并将其命名为“libs”。我将Apache Commons库的.jar复制到了所述文件夹中。

然后我右键单击我的项目,转到Java Build Path,添加JAR(s),MyPlugin> libs> the.jar

一旦添加,编码中的所有内容都可以正常工作。所有导入都正确读取,不会出现任何问题。

导出项目后,随着库附加到.jar

,它会明显变大

然而

我收到此错误:

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClient
at me.geekplaya.AdventureLobbies.FileUpload.upload(FileUpload.java:14)
at me.geekplaya.AdventureLobbies.AdventureLobbies.onCommand(AdventureLobbies.java:766)
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
... 12 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.net.ftp.FTPClient
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:41)
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:29)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 15 more

截图

enter image description here enter image description here


的.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="lib" path="/Users/gray/Applications/Java Workspace/Server/craftbukkit.jar"/>
    <classpathentry kind="lib" path="libs/commons-net-3.0.1.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

3 个答案:

答案 0 :(得分:3)

您想仔细检查该堆栈跟踪。 java.lang.NoClassDefFoundError不是java.lang.ClassNotFoundException。我认为它找到了commons-net-3.0.1.jar中的所有类,但是commons-net-3.0.1.jar有一些未被满足的依赖。破解commons-net-3.0.1.jar打开并查看是否可以找到.class来满足org.apache.commons.net.ftp.FTPClient。如果它不在那里,你将不得不找出它来自哪里(可能是其他一些JAR)并将它也放在类路径上。

答案 1 :(得分:1)

如果您注意到该行:

at java.lang.ClassLoader.loadClass(ClassLoader.java:423)

这是使用反射加载类的一行。尝试转到堆栈跟踪中的源代码,找到它要加载的类。

答案 2 :(得分:-2)

我不是专业人士,但我认为你必须将它添加到classpath中。如果你已经这样做了那么c的路径