在 jetty9 上使用 xml 部署 war 文件
Deploying war file using xml on jetty9
我正在尝试在 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.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 发行版并将其解压到任何您想要的路径。
现在这是您的 ${jetty.home}
目录。
这些是关于 ${jetty.home}
的最重要的事实
- 请勿编辑。
- 不要改变任何东西。
- 不要删除任何东西。
- 不要管它。
如果需要,您的计算机上可以有多个 ${jetty.home}
目录。他们不会互相踩踏或造成任何问题。
第 2 步:${jetty.base}
目录
在 ${jetty.home}
目录之外创建一个新目录。
这个现在空白的新目录是您 ${jetty.base}
.
的开始
A ${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 步:添加 WebApps
由于您在上面的步骤中选择了 deploy
模块,您现在有了一个 ${jetty.base}/webapps
,Jetty 使用它来自动部署其中找到的各种 Web 应用程序。
请参阅 the Deployment Architecture 上的文档以了解它寻找什么以及如何部署。
在您的情况下,只需将 myapp.xml
放入 ${jetty.base}/webapps/
目录即可。
Note: Using the deploy
module as-is, will only monitor and deploy from the ${jetty.base}/webapps/
directory. No other directory is looked in, or monitored for web applications. Not even the ${jetty.home}/webapps/
directory.
监控目录可以通过 ${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 步:(奖励)列出配置
有两种方法可以查看配置的外观。
- 在启动 jetty 之前查看服务器配置。
$ 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
我正在尝试在 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.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 发行版并将其解压到任何您想要的路径。
现在这是您的 ${jetty.home}
目录。
这些是关于 ${jetty.home}
- 请勿编辑。
- 不要改变任何东西。
- 不要删除任何东西。
- 不要管它。
如果需要,您的计算机上可以有多个 ${jetty.home}
目录。他们不会互相踩踏或造成任何问题。
第 2 步:${jetty.base}
目录
在 ${jetty.home}
目录之外创建一个新目录。
这个现在空白的新目录是您 ${jetty.base}
.
A ${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 步:添加 WebApps
由于您在上面的步骤中选择了 deploy
模块,您现在有了一个 ${jetty.base}/webapps
,Jetty 使用它来自动部署其中找到的各种 Web 应用程序。
请参阅 the Deployment Architecture 上的文档以了解它寻找什么以及如何部署。
在您的情况下,只需将 myapp.xml
放入 ${jetty.base}/webapps/
目录即可。
Note: Using the
deploy
module as-is, will only monitor and deploy from the${jetty.base}/webapps/
directory. No other directory is looked in, or monitored for web applications. Not even the${jetty.home}/webapps/
directory.
监控目录可以通过 ${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 步:(奖励)列出配置
有两种方法可以查看配置的外观。
- 在启动 jetty 之前查看服务器配置。
$ 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