【发布时间】:2021-06-03 11:33:32
【问题描述】:
我在 IntelliJ 中有一个带有 Tomcat 服务器的 maven Web 项目,并且在 WEB-INF 文件夹中有一个 web.xml 文件。该项目在当地运作良好。但是当我将它打包到战争中并将其部署到 Heroku 时,我收到一条错误消息,说没有找到 xml。我得到一个 404 错误(不确定是否相关。)我知道缺少 xml 不是错误消息,但 xml 包含重要信息。这怎么可能?
在开发中我一直在使用war-exploded。当我查看这个文件夹时,web.xml 就在那里,内容与开发中的相同。现在,将其部署到 Heroku,我尝试了两种方法: 1. 我使用 IntelliJ 与 Heroku 的集成; 2. 我从 Github 将项目部署在 Heroku 中。在这两种情况下,我都会遇到类似的错误。
在第一次尝试中,我将以下内容添加到我的 POM 文件中: 战争
<build>
<plugins>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>3.0.4</version>
<configuration>
<appName>app-name</appName>
</configuration>
</plugin>
</plugins>
</build>
然后我运行 Heroku:deploy-war,它说缺少 webxml。如果我强行忽略这一点,一切都会立即崩溃。在此过程中,会在目标文件夹下自动创建一个war文件。
在第二次尝试中,我添加了一个带有以下内容的 Procfile:
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT
target/app-name.war
我在我的 POM 文件中添加了以下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>copy</goal></goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.heroku</groupId>
<artifactId>webapp-runner</artifactId>
<version>9.0.41.0</version>
<destFileName>webapp-runner.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后我从 Heroku 中的 Git 部署它。有消息说没有找到xml。应用程序已启动,但我在请求资源时得到 404 页。
我正在考虑在本地部署战争,看看是否可以获得更多信息。
【问题讨论】:
-
这是什么 XML?是 web.xml 吗?您如何构建 WAR 文件?使用 Maven?还有什么?您是否查看过 WAR 文件以查看您的文件是否在其中、是否在正确的位置以及是否包含预期的内容?运行应用程序时是否有任何服务器错误?您必须提供比您在问题中写的更多的详细信息,否则人们无法帮助您
-
这表明您的 WAR 没有正确创建。您应该打开 WAR 并向自己证明它在各个方面都与在 IntelliJ 中成功运行的分解 WAR 相同。我建议您尝试使用 Spring Boot。您将不再需要 Tomcat。您将拥有一个在 JVM 上运行的可执行 JAR 文件。
-
很抱歉。我现在正在提供更多细节。虽然web在本地可以正常工作,但是我在部署的时候收到了一些红字,大部分都是乱码,所以我没有处理。但你提醒我,这可能是根本问题。部分消息显示“org.apache.catalina.startup.HostConfig.deployDirectory”“org.apache.jasper.servlet.TldScanner.scanJars”接下来我该怎么做?
-
好的。我现在正试图通过 Spring boot 将所有内容移至新项目。
-
@JaneR:在做任何事情之前,我建议你先看看生成的 WAR 文件。打开包装并查看内部,看看一切都符合预期。根据您的描述,WAR 可能是错误的。 WAR 是一个 ZIP 文件,因此使用 ZIP 扩展名重命名它,解压缩并查看内部。