我正在使用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
的.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>
答案 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的路径