我有一个 Java 类,它有一个 main,我过去常常作为一个独立的应用程序从命令行运行,例如。
java -jar myjar.jar params
我需要重新打包代码以便在 apache 下运行,所有的代码,包括旧 jar 中的入口点类,最终都放到了一个 WAR 文件中,以便轻松地部署到 Web 服务器中。
但是,我仍然希望能够从命令行运行它,而且代码没有改变,都在里面,我只是不知道如何让它运行。
我是这么想的。
我以为战争就像一个罐子,所以
java -jar mywar.war params
这个错误说明在清单中没有定义主类。
我手动添加了一个清单到战争,并再次尝试,与同样的效果。
我注意到在我的 war 文件夹中有一个名为 META-INF 的文件夹,其中包含一个 Manif.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我觉得这没什么区别。