我正在使用 maven-tomcat-plugin 在 tomcat6 服务器上部署挂毯应用程序。部署过程运行良好,但现在我需要使用不同的生产/开发/测试/等路径多次部署它。环境,这是使用 Maven 配置文件的一种。
我已将一个部署配置文件的上下文路径设置为:/myapp/latest
. 生成的用于部署的 URL 如下所示:
http://example.com:8080/manager/deploy?path=%2Fmyapp%2Flatest&update=true
Tomcat 现在使用一些约定:在 .war 的文件名中,井号被斜线替换(#
被替换为/
),以构造应用程序的 url。战争被解压缩到一个文件夹,该文件夹的名称是战争的文件名,没有 .war 扩展名。
应用程序无法启动,原因从日志中似乎很清楚:
Caused by: java.io.FileNotFoundException: /var/lib/tomcat6/webapps/myapp%23latest/WEB-INF/classes/de/myapp/services/AppModule.class (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.getStreamForPath(PlasticInternalUtils.java:408)
at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.readBytecodeForClass(PlasticInternalUtils.java:370)
路径/var/lib/tomcat6/webapps/myapp%23latest/
不存在,/var/lib/tomcat6/webapps/myapp#latest/
当然应该存在。%23
是一个井号,所以我猜在某些时候它会被 url 编码。我在这个问题上找不到太多,只是涉及双哈希的tomcat7的一些类似问题,不幸的是没有任何解决方案。
我可以通过不使用子路径来避免这个问题,但我知道这个应该可以工作:我已经在 grizzly/jersey 项目中使用了相同的方法,没有任何问题。
如何正确设置子路径?有没有办法告诉应用程序不对路径进行编码?tomcat 插件在这里似乎没有提供太多选项,那么有没有办法在 web.xml 或 context.xml 之类的配置文件中设置路径?