首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jetty9上使用xml部署war文件

在jetty9上使用xml部署war文件
EN

Stack Overflow用户
提问于 2015-10-22 16:47:02
回答 1查看 1.4K关注 0票数 1

我试图在jetty9上部署一个war文件,如果我把它放到webapp文件夹中,它可以正常工作,但是我想使用一个xml文件来部署它。

我得到的例外是:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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>工具。

示例:

代码语言:javascript
复制
$ 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

这也没那么难。

代码语言:javascript
复制
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar

恭喜你有个正在运行的码头。

步骤5:(奖金)列出配置

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

  1. 在启动jetty之前,请参阅服务器配置。
代码语言:javascript
复制
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar --list-config
  1. 在服务器完全启动后,请查看服务器状态。
代码语言:javascript
复制
$ cd /path/to/my.base
$ java -jar /path/to/jetty-dist/start.jar jetty.server.dumpAfterStart=true
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33286312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档