我有一个Java类,其中包含一个main方法,我曾经可以从命令行作为独立应用运行它,例如:
java -jar myjar.jar params
我需要重新打包代码以在apache下运行,将所有代码(包括旧jar中的入口点类)放入WAR文件中,以便轻松部署到Web服务器。
然而,我仍然希望能够从命令行运行它,代码没有改变且全部都在那里,只是我无法弄清楚如何运行它。
这是我尝试过的...
我假设WAR文件就像一个jar文件,所以
java -jar mywar.war params
在清单文件中没有定义主类,执行失败。
我手动将清单文件添加到war文件中并再次尝试,结果相同。
我注意到我的war文件中有一个名为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,虽然我认为这应该没有什么区别。