You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署至Heroku时无法识别Maven依赖及本地Jar文件求助

我之前部署Java应用到Heroku时也踩过类似的依赖坑,给你几个具体的排查和解决方向:

1. 检查Servlet API依赖的scope配置

很多人会把javax.servlet-api的scope设为provided,这表示依赖由运行容器提供,不会打包到war包里。但如果Heroku的web容器没有正确识别或提供这个依赖,就会出现找不到类的问题。

建议先去掉provided scope,让Maven把依赖打包进war包试试:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <!-- 注释掉这行,让依赖被打包到war中 -->
    <!-- <scope>provided</scope> -->
</dependency>
2. 放弃手动lib目录的Gson.jar,改用Maven依赖管理

手动把jar包丢到lib目录的方式,Maven默认不会把这些文件包含到最终的war包中(除非你额外配置),而且Heroku的构建流程也不会自动识别这种本地依赖。

直接在pom.xml里添加Gson的官方Maven依赖更可靠:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 可以换成最新稳定版 -->
</dependency>

添加后执行mvn clean package,Maven会自动下载并把Gson打包到war包里。

3. 验证webapp-runner插件的配置完整性

确保你的webapp-runner插件配置正确,尤其是版本要和你的Servlet版本匹配,并且绑定了正确的执行目标:

<build>
    <plugins>
        <!-- 先确保war插件配置正确,支持无web.xml的情况 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <!-- webapp-runner插件配置 -->
        <plugin>
            <groupId>com.heroku</groupId>
            <artifactId>webapp-runner-maven-plugin</artifactId>
            <version>9.0.71.0</version> <!-- 对应Servlet 4.0的Tomcat版本 -->
            <executions>
                <execution>
                    <goals>
                        <goal>configure</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
4. 本地先验证打包和运行

在推送到Heroku之前,先在本地测试:

  1. 执行mvn clean package生成war包
  2. 用webapp-runner运行war包:java -jar target/dependency/webapp-runner.jar target/*.war
    如果本地运行也出现同样的类找不到问题,说明是项目配置的问题,和Heroku无关,先在本地解决再部署。
5. 查看Heroku日志定位具体错误

部署后如果还是有问题,执行heroku logs --tail查看实时日志,找到具体的ClassNotFoundException信息,确认是哪个类找不到,这样能更精准地定位依赖配置问题。

内容的提问来源于stack exchange,提问作者khalid bitar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:28:17