【发布时间】:2011-01-28 08:14:12
【问题描述】:
我正在尝试制作一个“可执行”war 文件 (java -jar myWarFile.war),它将启动一个 Jetty 网络服务器,该服务器托管我执行的 WAR 文件中包含的 web 应用程序。
我发现 a page 描述了如何制作我正在寻找的东西:
但是,遵循该建议以及我认为我应该如何制作可执行 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 文件启动并运行?
【问题讨论】:
-
你有有一个.war文件吗?为什么不拥有一个 .jar 文件,其中包含 .war 文件、jetty 分发和一个以编程方式启动 jetty 并将您的 web 应用程序加载到上下文的主类。
标签: java executable jetty manifest war