在startup/catalina脚本中tomcat爆破war和手动爆破war有什么区别?

Difference between tomcat exploding war in startup/catalina script and manually exploding war?

我已将我的 .war 复制到本地 tomcat 服务器的 webapps 文件夹中。当我开始 tomcat 时,.war 被分解为与我使用 jar -xf 手动分解时不同的结构。当我手动展开 .war 时,我得到 WEB-INF 文件夹作为 app 文件夹的 child(如下)。这就是我想要的。

两者启动都很好,但是当 tomcat 爆炸我的 war 时,发送资源请求总是 returns 404。我认为 WEB-INF 需要 child 展开的 war 目录请求 return 200。手动展开 .war inside webapps 然后 运行 tomcat 工作并且也停止 tomcat 在 auto-exploded 和 war 之后,将 WEB-INF 向上移动一级,然后重新启动 tomcat 也可以。

有没有办法打包我的 war 以便 tomcat 将其分解为 WEB-INF 作为分解的 war 目录的直接 child ?为什么 tomcat 爆炸 war 与 jar -xf 有什么不同?

TOMCAT

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

例如,请参见以下屏幕截图: