Ошибка: «вызвано: java .lang.ClassNotFoundException: org.eclipse.paho.client.mqttv3.MqttCallback» при выполнении java -jar myproyect.jar - PullRequest
0 голосов
/ 06 марта 2020

Я получил эту ошибку, когда попытался запустить проект с помощью java -jar. Мой проект - это MQTT-сервер, который имеет класс контроллера:

public class ControladorMQTT

и класс обратного вызова:

public class CallbackMQTT implements MqttCallback

, и кажется, что класс обратного вызова не обнаружен.

Это полная ошибка:

C:\Users\Moreno\Documents\IntelliJ\ControladorMQTT\out\artifacts\ControladorMQTT_jar>java -jar ControladorMQTT.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/paho/client/mqttv3/MqttCallback
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.privateGetMethodRecursive(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.eclipse.paho.client.mqttv3.MqttCallback
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more

У меня есть файл MANIFEST.MF, созданный так:

Manifest-Version: 1.0
Main-Class: MQTT.ControladorMQTT
Class-Path: org.eclipse.paho.client.mqttv3.MqttCallback

РЕДАКТИРОВАТЬ

Я добавил библиотеку C:\Users\Moreno\.m2\repository\org\eclipse\paho\org.eclipse.paho.client.mqttv3\1.2.0\org.eclipse.paho.client.mqttv3-1.2.0.jar в свое приложение .jar directoy и изменил MANIFEST, чтобы он выглядел так:

Manifest-Version: 1.0
Main-Class: MQTT.ControladorMQTT
Class-Path: org.eclipse.paho.client.mqttv3-1.2.0.jar

, но он все еще не работает.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вам необходимо включить внешние зависимости (файлы jar) в путь к классам. Примерно так:

java -cp C:\path\to\file.jar;C:\path\to\some-lib-jars\*;. -jar ControladorMQTT.jar

См .:

0 голосов
/ 07 марта 2020

Ваш манифест Class-Path: декларация неверна. См. Документацию здесь

Он должен содержать список Jar-файлов, содержащих библиотеки, которые вы использовали в своем приложении. Вы добавили один класс org.eclipse.paho.client.mqttv3.MqttCallback, это не будет работать.

Это должно выглядеть примерно так:

Manifest-Version: 1.0
Main-Class: MQTT.ControladorMQTT
Class-Path: paho-3.1.jar

И файл paho-3.1.jar должен быть в том же каталог в качестве приложения jar.

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