ClassNotFoundException - не имеет смысла - PullRequest
2 голосов
/ 31 января 2012

Общая информация

Я разрабатываю плагин для Minecraft, используя API Bukkit.Я должен использовать библиотеку Apache Commons NET.

Проблема

Я получаю ClassNotFoundException после запуска JAR.

Разрешение (RESOLVED)

Я вручную создал свой файл MANIFEST.MF (установите его для использования моего пользовательского файла при экспорте JAR) и поместил его в него:

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

Работал как шарм.


Что я сделал

Я создал папку в Project Explorer в своем плагине и назвал ее "libs".Я скопировал .jar для библиотеки Apache Commons в указанную папку.

Затем я щелкнул правой кнопкой мыши по своему проекту, перешел к пути сборки Java, добавил JAR, 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 ]

3 голосов
/ 31 января 2012

Вы хотите изучить эту трассировку стека.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 голос
/ 31 января 2012

Если вы заметили строку:

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

Это строка, которая загружает класс с помощью отражения.Попробуйте перейти к источнику в трассировке стека и найти, какой класс он пытается загрузить.

0 голосов
/ 31 января 2012

я не профессионал, но я думаю, вам нужно добавить его в classpath. Если вы уже сделали это, то путь к c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...