在jetty9上使用xml部署war文件

时间:2015-10-22 16:47:02

标签: java jetty

我正在尝试在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

1 个答案:

答案 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步:(加分)列出配置

有两种方法可以查看配置是什么样的。

  1. 在启动jetty之前,请参阅服务器配置。
  2. $ cd /path/to/my.base
    $ java -jar /path/to/jetty-dist/start.jar --list-config
    
    1. 完全启动后查看服务器状态。
    2. $ cd /path/to/my.base
      $ java -jar /path/to/jetty-dist/start.jar jetty.server.dumpAfterStart=true