[英]Deploying war file using xml on jetty9
我正在尝试在warty9上部署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-9.3.3.v20150827
因此,对于您的方案,您需要了解${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
,它是用于启动码头的一组命令行参数。 (类似于所有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:添加您的WebApp
由于您在上面的步骤中选择了deploy
模块,因此您现在有了一个${jetty.base}/webapps
,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:运行码头
这也不难。
$ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.