Java 启动/catalina脚本中tomcat爆发战争和手动爆发战争之间的区别?

Java 启动/catalina脚本中tomcat爆发战争和手动爆发战争之间的区别?,java,tomcat,war,executable-jar,web-inf,Java,Tomcat,War,Executable Jar,Web Inf,我已将.war复制到本地tomcat服务器的webapps文件夹中。当我启动tomcat时,.war会被分解成一种不同于我用jar-xf手动分解它时的结构。当我手动分解.war时,我将WEB-INF文件夹作为app文件夹的子文件夹(如下所示)。这就是我想要的 两个启动都很好,但当tomcat引爆我的战争时,发送资源请求总是返回404。我认为WEB-INF应该是分解的war目录的子目录,请求返回200。在webapps中手动分解.war,然后运行tomcat,并在tomcat自动分解war后停止它

我已将.war复制到本地tomcat服务器的webapps文件夹中。当我启动tomcat时,.war会被分解成一种不同于我用jar-xf手动分解它时的结构。当我手动分解.war时,我将WEB-INF文件夹作为app文件夹的子文件夹(如下所示)。这就是我想要的

两个启动都很好,但当tomcat引爆我的战争时,发送资源请求总是返回404。我认为WEB-INF应该是分解的war目录的子目录,请求返回200。在webapps中手动分解.war,然后运行tomcat,并在tomcat自动分解war后停止它,将WEB-INF向上移动一级,然后重新启动tomcat也可以工作

有没有一种方法可以打包我的war,以便tomcat将WEB-INF作为分解的war目录的直接子目录来分解它?为什么tomcat的战争爆发方式与jar-xf有所不同

雄猫

exploded_war
├── app_name
│   └── WEB-INF
│       ├── classes
│       │   └── ...
│       ├── servlet.xml
│       ├── lib
│       │   ├── ...
│       └── web.xml
└── META-INF
    └── ...
手册

exploded_war
└── WEB-INF
    ├── classes
    │   └── ...
    ├── servlet.xml
    ├── lib
    │   ├── ...
    └── web.xml
编辑-这是在项目文件夹中执行的生成脚本-

mvn package
cp src/WEB-INF/*.xml /target/app_name/WEB-INF 
cd target
jar -cvf app_name.war app_name/WEB-INF 
cp app_name.war {path_to}/apache-tomcat-8.5.13/webapps

您的WAR文件结构不正确。WAR文件的根目录下不得包含应用程序名称文件夹。 您需要从jar命令中删除app_name文件夹

mvn package cp src/WEB-INF/*.xml /target/app_name/WEB-INF cd target/app_name jar -cvf ../app_name.war WEB-INF cd .. cp app_name.war {path_to}/apache-tomcat-8.5.13/webapps 打包 cp src/WEB-INF/*.xml/target/app_name/WEB-INF cd目标/应用程序名称 jar-cvf../app_name.war WEB-INF 光盘 cp app_name.war{path_to}/apache-tomcat-8.5.13/webapps 例如,请参见以下屏幕截图:

您是如何生成WAR文件的?手动?使用IDE?使用Ant?之类的脚本和使用maven的构建脚本。我把它添加到我原来的博文中就这样!谢谢我没有意识到jar会使用“jar-cvf”命令保留目录结构。你知道为什么jar-xf会返回所需级别的WEB-INF吗?