我有一个 Java 类,它有一个 main,我曾经从命令行作为独立应用程序运行,例如
java -jar myjar.jar params
我需要重新打包代码以在 apache 下运行,而我的所有代码,包括旧 jar 中的入口点类,最终都保存在一个 WAR 文件中,以便于部署到 Web 服务器中。
但是,我仍然希望能够从命令行运行它,并且代码没有改变并且都在那里,我只是不知道如何让它运行。
这是我尝试过的......
我认为 WAR 就像一个 jar ,所以
java -jar mywar.war params
说明 list 中没有定义主类失败。
我手动将 list 添加到 war 中并再次尝试,效果相同。
我注意到在我的 war 中我有一个名为 META-INF 的文件夹,其中包含一个 manifest.mf,所以我在其中添加了一行来声明我的主类,就像我在普通 list 中所做的那样......
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,我认为这不会有什么不同。
最佳答案
类似于 Richard Detsch,但更容易理解(也适用于包)
第 1 步:解开 War 文件。
jar -xvf MyWar.war
第二步:进入目录
cd WEB-INF
第 3 步:运行所有依赖项的 main
java -classpath "lib/*:classes/." my.packages.destination.FileToRun
关于java - 如何从命令行运行 WAR 中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1842972/