Tomcat 9.0.7 NoClassDefFoundError

SELBST GELÖST!

Ich habe ein Problem mit einem Servlet auf dem Tomcat.

Ich bekomme einen Fehler zurück:

java.lang.NoClassDefFoundError: javax/jms/JMSException
      de.xyz.webservlet.webserver.XYZServlet.init(XYZServlet.java:28)

Die Zeile 28 befindet sich in der init() Methode des Servlets:

public class XYZServlet extends HttpServlet {

    private RemoteUserBackendCommunicator backendCommunicator;

    @Override
    public void init() {
        backendCommunicator = new RemoteUserBackendCommunicator(); // <--- Zeile 28
    }

   // ...
}

Die Klasse liegt in einem anderen Verzeichnis, aber ich habe es auch probiert, was geschieht, wenn ich die in das gleiche Paket lege, dann kommt der selbe Fehler (-2 Zeilen, da ich kein Include mehr für RemoteUserBackendCommunicator brauche).

Ich gehe nach dem Buch “Java Web Services Up and Running” von Martin Kalin beim O’Reilly-Verlag vor und verwende eine leicht abgewandelte Variante des dort vorgestellten Ant-Skripts zum Deployen. Die ersten Beispiele aus dem Buch funktionieren auch, dort wird ebenfalls auf andere Klassen zugegriffen, es wäre ja auch seltsam, wenn das nicht ginge.

Deren class-Files liegen im war-File und im von Tomcat Erzeugten Verzeichnis unter webapps an vergleichbaren Stellen.

Erstaunlich ist ja auch, dass der Tomcat die XYZServlet-Klasse sehr wohl findet, aber die daneben legende andere Klasse nicht.

Ich hab auch schon in die Logs nach anderen Fehlern geschaut, da ist aber nichts zu finden. Alle Dateien sind ziemlich klein und übersichtlich.

In beiden Fällen (Projekt aus dem Buch und meines) ist die Struktur so:

Web-inf\classes\...

Edit: Ich habe unter https://coderanch.com/t/358430/java/ClassNotFoundException-class-WEB-INF-classes

folgendes gefunden:

“The class not being found inherited from another class. It was a JAR file that contained that class that was missing from my deployment. I’m not sure why the ClassLoader was complaining about the subclass not being found instead of the super class, but that’s my story and I’m sticking to it!”

Leider kommt danach keine Lösung mehr, allerdings hat RemoteUserBackendCommunicator auch keine Superklasse.

Ich hab die Lösung gefunden: Es lag an einem fehlenden Jar-File. Aber die Fehlermeldung ist total verwirrend, weil meine offenbar vorhandene Klasse als Fehlend angemeckert wurde. In dieser wurde etwas aus dem Jar-File verwendet.