Ich habe eine Java-Klasse mit einer Hauptklasse und habe sie früher als eigenständige App über die Befehlszeile ausgeführt, z
java -jar myjar.jar params
Ich musste den Code neu packen, um unter Apache ausgeführt zu werden, und mein gesamter Code, einschließlich der Einstiegspunktklasse aus dem alten JAR, wurde zur einfachen Bereitstellung auf dem Webserver in einer WAR-Datei gespeichert.
Ich möchte es jedoch weiterhin über die Befehlszeile ausführen können, und der Code hat sich nicht geändert und ist alles enthalten. Ich kann nur nicht herausfinden, wie ich es zum Laufen bringen kann.
Folgendes habe ich versucht ...
Ich nahm an, dass der KRIEG wie ein Glas war
java -jar mywar.war params
Das scheiterte daran zu sagen, dass im Manifest keine Hauptklasse definiert war.
Ich habe dem Krieg manuell ein Manifest hinzugefügt und es erneut versucht, mit dem gleichen Effekt.
Ich bemerkte, dass ich in meinem Krieg einen Ordner namens META-INF hatte, der eine manifest.mf enthielt, also fügte ich eine Zeile hinzu, in der meine Hauptklasse wie in einem normalen Manifest deklariert wurde ...
Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass
Dies ergab noClassDefFoundError mypackage.MyEntryPointClass
eine Art Fortschritt. Das ließ mich glauben, dass es nur ein Pfadproblem war, 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 nichts finden, was meine Frage beantwortet, und ich habe hier ein paar andere Fragen gelesen, die etwas anders sind, also dachte ich, ich würde etwas posten.
Java 1.5, nicht dass ich denke, dass das einen Unterschied machen sollte.