Wie führe ich eine Klasse in einer WAR von der Kommandozeile aus?

Ich besitze eine Java-Klasse mit einem main und habe sie als eigenständige App über die Befehlszeile ausgeführt, z.

java -jar myjar.jar params

Ich musste den Code neu packen, damit er unter Apache ausgeführt werden konnte, und mein gesamter Code, einschließlich der Einstiegspunktklasse aus der alten JAR-Datei, wurde in eine WAR-Datei geschrieben, damit er problemlos auf den Webserver übertragen werden kann.

Ich möchte es jedoch weiterhin über die Befehlszeile ausführen können und der Code hat sich nicht geändert und ist alles vorhanden. Ich kann nur nicht herausfinden, wie ich ihn zum Ausführen bringen kann.

Folgendes habe ich versucht ...

Ich nahm an, dass der KRIEG wie ein Glas war, also

java -jar mywar.war params

Das konnte nicht heißen, dass im Manifest keine Hauptklasse definiert war.

Ich habe dem Krieg manuell ein Manifest hinzugefügt und es mit demselben Effekt erneut versucht.

Mir ist aufgefallen, dass ich in meinem Krieg einen Ordner namens META-INF hatte, der eine manifest.mf enthielt, also habe ich der Deklaration meiner Hauptklasse eine Zeile hinzugefügt, wie ich es in einem normalen Manifest tun würde ...

Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass

Das gab einnoClassDefFoundError mypackage.MyEntryPointClass, was eine Art Fortschritt ist. Das ließ mich glauben, dass es sich nur um ein Pfadproblem handelte, also versuchte ich es

Manifest-Version: 1.0
Main-Class: WEB-INF.classes.mypackage.MyEntryPointClass

Ich bekomme jetzt den gleichen Fehler, aber mit einem Stack-Trace ...

Exception in thread "main" java.lang.NoClassDefFoundError: WEB-INF/classes/mypackage/MyEntryPointClass (wrong name: mypackage/MyEntryPointClass)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        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)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

Ich habe ein bisschen gegoogelt, kann aber keine Antwort auf meine Frage finden, und ich habe hier ein paar andere Fragen gelesen, die sich leicht voneinander unterscheiden. Deshalb dachte ich, ich würde etwas posten.

Java 1.5, nicht das ich denke das sollte einen Unterschied machen.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage