我正在尝试在jetty9上部署war文件,如果我把它放到webapps文件夹中但是我想使用xml文件部署它,它可以正常工作。
以下是我得到的例外情况:
2015-10-22 17:36:39.593:WARN:oejw.WebAppContext:main: Failed startup of context o.e.j.w.WebAppContext@61a485d2{/myapp,file:///tmp/jetty-openbd.war-_myapp-any-1881803922382581907.dir/webapp/,null}{/opt/openbd.org/openbd.war}
java.lang.NullPointerException
at org.eclipse.jetty.webapp.MetaInfConfiguration.preConfigure(MetaInfConfiguration.java:77)
at org.eclipse.jetty.webapp.WebAppContext.preConfigure(WebAppContext.java:474)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:510)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1510)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1435)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:214)
at org.eclipse.jetty.start.Main.start(Main.java:457)
at org.eclipse.jetty.start.Main.main(Main.java:75)
和我的xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/myapp</Set>
<Set name="war">/opt/openbd.org/openbd.war</Set>
</Configure>
我试着<Set name="extractWAR">true</Set>
没有运气。
我还使用了--debug
,它没有提供任何线索..
我做错了什么? Jetty版本:jetty-9.3.3.v20150827
答案 0 :(得分:1)
因此,对于您的方案,您需要了解${jetty.base}
和${jetty.home}
的运作方式。
第1步:${jetty.home}
目录
在任何地方下载码头发行版并将其解压缩到您想要的任何路径。
现在是您的${jetty.home}
目录。
这些是关于${jetty.home}
如果需要,您可以在计算机上拥有多个${jetty.home}
目录。他们不会踩到对方或造成任何问题。
第2步:${jetty.base}
目录
在${jetty.home}
目录的外部创建一个新目录。
这个新的,现在为空的目录是${jetty.base}
。
${jetty.base}
表示Jetty特定实例的配置。您也可以拥有多个${jetty.base}
目录。每个目录代表正在运行的Jetty的唯一实例。
${jetty.base}
的基本配置是start.ini
,它是一组用于启动jetty的命令行参数。 (类似于所有Eclipse RT项目的工作方式)
要使用命令行工具初始化${jetty.base}
,您可以使用${jetty.home}/start.jar
及其--add-to-start=<module>
工具。
示例:
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=http,deploy,websocket
恭喜您刚刚初始化了${jetty.base}
目录。
第3步:添加您的WebApps
由于您在上面的步骤中选择了deploy
模块,因此您现在拥有一个${jetty.base}/webapps
,Jetty使用它来自动部署其中的各种Web应用程序。
请参阅the Deployment Architecture上的文档,了解它的用途及其部署方式。
在您的情况下,只需将myapp.xml
放入${jetty.base}/webapps/
目录。
注意:按原样使用
deploy
模块,只会从${jetty.base}/webapps/
目录进行监控和部署。没有为Web应用程序查找或监视其他目录。甚至不是${jetty.home}/webapps/
目录。
可以通过${jetty.base}/start.ini
中的属性配置受监控目录。只需设置jetty.deploy.monitoredDir=<relative-path>
,即可监控此新路径(无需编辑jetty-deploy.xml
)。受监视的目录配置为始终位于指定的${jetty.base}
目录下。看到${jetty.base}
目录可以在您的文件系统的任何位置,使用${jetty.base}
工具应该没有问题。
第4步:运行Jetty
这也不难。
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar
恭喜你有一个正在运行的码头。
第5步:(加分)列出配置
有两种方法可以查看配置是什么样的。
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar --list-config
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar jetty.server.dumpAfterStart=true