繁体   English   中英

在jetty9上使用xml部署war文件

[英]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 :(奖金)列出配置

有两种查看配置外观的方法。

  1. 开始码头之前,请参阅服务器配置。
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar --list-config
  1. 完全启动后,查看服务器状态。
$ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM