2017-12-12 11 views
0

Ich verwende Ant, um meine Java-Anwendung auszuführen. Ich habe meine main in Subscriber Klasse, die andere Bibliotheken verwendet. Also wollte ich die Controller.Subscriber laufen lassen. Aber ich bekomme die folgenden Fehler:Ant-Datei kann keine Java-Anwendung über Klassendateien ausführen

[java] Error: A JNI error has occurred, please check your installation and try again 
[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/paho/client/mqttv3/MqttCallback 
[java]  at java.lang.Class.getDeclaredMethods0(Native Method) 
[java]  at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
[java]  at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
[java]  at java.lang.Class.getMethod0(Class.java:3018) 
[java]  at java.lang.Class.getMethod(Class.java:1784) 
[java]  at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
[java]  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
[java] Caused by: java.lang.ClassNotFoundException: org.eclipse.paho.client.mqttv3.MqttCallback 
[java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
[java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
[java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[java]  ... 7 more 
[java] Java Result: 1 

Meine Ant-Datei ist die folgende:

<project default="run"> 
    <target name="run"> 
     <java classname="Controller.Subscriber" fork="true"> 
      <classpath> 
       <pathelement path="target/classes"/> 
      </classpath> 
     </java> 
    </target> 
</project> 

Der Weg zum Teilnehmerklasse: target/classes/Controller/Subscriber.class

Was ist Ich mache falsch? Muss ich zuerst eine JAR-Datei aus meinen Klassendateien erstellen, um das Java-Programm auszuführen oder kann ich die Klassendateien ausführen? Oder vermisse ich einen Parameter in meinem java Befehl?

Ich habe auch versucht die folgende Ant-Datei durch explizite Classpath geben:

<project default="run"> 
     <target name="run"> 
      <java classname="Controller.Subscriber" fork="true" classpath="classpath"> 
       <classpath> 
        <pathelement path="target/classes"/> 
       </classpath> 
      </java> 
     </target> 
     <path id="classpath"> 
      <fileset dir="target"> 
        <include name="*.jar"/> 
      </fileset> 
     </target> 
    </project> 

Aber ich bin immer die gleiche Fehlermeldung.

Antwort

0

Ich habe die Lösung für das Problem gefunden: Ich muss classpathref statt classpath verwenden. Aus irgendeinem Grund liest classpath="classpath" nicht die ID "classpath". Aber classpathref löste das Problem.

Verwandte Themen