我试图在jetty9上部署一个war文件,如果我把它放到webapp文件夹中,它可以正常工作,但是我想使用一个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-9.3.3.v20150827
发布于 2015-10-22 21:41:53
因此,对于您的场景,您需要了解${jetty.base}和${jetty.home}是如何操作的。
步骤1:目录
下载并解压jetty发行版,在任何地方,到任何您想要的路径。
这现在是您的${jetty.home}目录。
这些是关于${jetty.home}最重要的事实
如果需要,您可以在计算机上拥有多个${jetty.home}目录。他们不会互相践踏,也不会引起任何问题。
步骤2:目录
在${jetty.home}目录之外创建一个新目录。
这个新的、现在为空的目录是您的${jetty.base}的开始。
${jetty.base}表示特定Jetty实例的配置。您也可以有多个${jetty.base}目录。每个目录代表一个正在运行的Jetty的唯一实例。
${jetty.base}的基本配置是start.ini,它是一组用于启动jetty的命令行参数。(类似于所有Eclipse项目的工作方式)
要使用命令行工具初始化${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使用它自动部署在Jetty中找到的各种web应用程序。
请参阅有关部署体系结构的文档,以了解它所查找的内容及其部署方式。
在您的示例中,只需将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=truehttps://stackoverflow.com/questions/33286312
复制相似问题