java - 如何从命令行运行 WAR 中的类?

标签 java jar war

我有一个 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/

相关文章:

java - Android 重定向(返回代码 302)处理

Java 8 流按最大重复项排序然后区分

java - 使用 ceylon import-jar

java - CloudFoundry 中部署的线程池代码不起作用

java - 错误无法检测 ServletContainerInitializers Tomcat 8

war - 如何在应用服务器上安装 FitNesse 作为 war/ear

java - 为什么 GUI 不工作,代码是否正确?

java - 是否有 TreeVisitor 用于按评估顺序访问表达式树?

java - java jar 中的路径问题

jar - 一键在Mac OS X上以root权限运行jar