【问题标题】:Why cannot my xml file in the artifact recognize the mappings?为什么我在工件中的 xml 文件无法识别映射?
【发布时间】: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 扩展名重命名它,解压缩并查看内部。

标签: java maven jsp servlets


【解决方案1】:

在这里搜索类似问题后,我意识到我在war文件中丢失了web.xml,因为它是一个maven项目,我应该将它放在src/main/webapp文件夹中,而不是web文件夹中。使用 maven-webapp 原型将我的项目复制到另一个项目后,我能够将 web.xml 文件包含在我的 war 文件中并成功部署我的项目。

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2019-03-17
    • 1970-01-01
    • 2020-12-24
    • 2022-07-29
    • 2016-06-03
    相关资源
    最近更新 更多