我有一个具有主类的Java类,并且我曾经从命令行作为独立应用程序运行,例如
java -jar myjar.jar params
我需要重新包装代码以使其在apache下运行,并且我的所有代码(包括旧jar中的入口点类)都已打包到WAR文件中,以便轻松部署到Web服务器中。
但是,我仍然希望能够从命令行运行它,并且代码没有更改,并且全部存在,只是无法弄清楚如何运行它。
这是我尝试过的...
我以为战争就像罐子一样
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)
我已经在Google上搜索了一下,但找不到能回答我问题的任何东西,并且我在这里阅读了其他几个稍有不同的问题,因此我想发表。
Java 1.5,不是我认为应该有所作为。