如何从命令行在 WAR 中运行类?
我有一个Java类,它有一个main,我曾经从命令行作为一个独立的应用程序运行,例如
java -jar myjar.jar params
我需要重新打包代码以在apache下运行,我的所有代码,包括旧jar中的入口点类,最终都放在WAR文件中,以便于进入Web服务器。
但是,我仍然希望能够从命令行运行它,并且代码没有更改并且全部在那里,我只是不知道如何让它运行。
这是我尝试过的...
我以为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,并不是说我认为这应该有什么不同。