我正在尝试制作一个“可执行”war 文件 ( java -jar myWarFile.war
),它将启动一个 Jetty 网络服务器,该服务器托管我执行的 WAR 文件中包含的 webapp。
我找到了一个页面,描述了如何制作我正在寻找的东西:
但是,遵循该建议以及我认为我应该如何制作一个可执行的 jar (war) 是行不通的。
我有一个 Ant 任务,它创建一个带有如下清单的 WAR 文件:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.1 Created-By: 1.5.0_18-b02 (Sun Microsystems Inc.) Main-Class: Start
WAR 文件的内容如下所示:
> Start.class
> jsp
> build.jsp
> META-INF
> MANIFEST.MF
> WEB-INF
> lib
> jetty-6.1.22.jar
> jetty-util.6.1.22.jar
当我尝试执行 WAR 文件时,错误是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/jetty/Handler
Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Handler
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Start. Program will exit.
这里似乎有两个错误:一个似乎找不到 JAR 文件,另一个Start
是找不到类。
为了修复第一个问题,我将 Jetty JAR 文件放在 WAR 文件的基础中并再次尝试——同样的错误。我还尝试将 添加WEB-INF/lib/<specific-JAR-files>
到Class-Path
清单的属性中。那也没有用。
有没有人知道我在做什么正确/错误以及如何让这个可执行的 WAR 文件启动并运行?