У меня есть класс Java, в котором есть main, и я использовал его для запуска в качестве отдельного приложения из командной строки, например,
java -jar myjar.jar params
Мне нужно было переупаковать код для запуска под apache, и весь мой код, включая класс точки входа из старого jar-файла, оказался в файле WAR для удобства развертывания на веб-сервере.
Тем не менее, я все еще хочу иметь возможность запустить его из командной строки, и код не изменился и все там, я просто не могу понять, как заставить его работать.
Вот что я попробовал ...
Я предположил, что ВОЙНА была похожа на банку, поэтому
java -jar mywar.war params
Не удалось сказать, что в манифесте не определен главный класс.
Я вручную добавил манифест в войну и попробовал снова, с тем же эффектом.
Я заметил, что в моей войне у меня была папка с именем META-INF, содержащая manifest.mf, поэтому я добавил строку к этому объявлению моего основного класса, как и к обычному манифесту ...
Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass
Это дало noClassDefFoundError mypackage.MyEntryPointClass
, что является своего рода прогрессом. Это заставило меня поверить, что это была просто проблема пути, поэтому я попытался
Manifest-Version: 1.0
Main-Class: WEB-INF.classes.mypackage.MyEntryPointClass
Теперь я получаю ту же ошибку, но с трассировкой стека ...
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)
Я немного погуглил, но не могу найти ничего, что отвечало бы на мой вопрос, и я прочитал здесь пару других вопросов, которые немного отличаются, поэтому я подумал, что опубликую.
Java 1.5, не то чтобы я думаю, что это должно иметь какое-то значение.