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

Heroku部署Maven构建Java App报错:无法找到主类

Maven Java应用部署Heroku及本地运行失败排查

问题核心

Maven构建的Java应用本地运行、Heroku部署均失败,启动日志提示:

Error: Could not find or load main class com.heroku.chiller.service.WorkerProcess

推测pom.xml配置存在问题,但无法定位,已尝试调整pom和Procfile、与同事排查均无效,需定位错误根源。

关键信息参考

启动日志

Error: Could not find or load main class com.heroku.chiller.service.WorkerProcess

WorkerProcess.java(需确认的核心点)

// 请确保代码包含正确的包声明和main方法
package com.heroku.chiller.service;

public class WorkerProcess {
    // 必须是public static void main(String[] args)签名
    public static void main(String[] args) {
        // 业务逻辑代码
    }
}

Procfile(示例)

# 两种常见写法,需核对路径和命令正确性
worker: java -cp target/classes:target/dependency/* com.heroku.chiller.service.WorkerProcess
# 或使用可执行jar包
worker: java -jar target/your-app-artifact-id.jar

pom.xml(重点检查build插件配置)

需关注maven-compiler-plugin(编译配置)和maven-jar-plugin/maven-shade-plugin(主类指定)的配置。

项目结构(需匹配包路径)

项目根目录/
├── src/
│   └── main/
│       └── java/
│           └── com/
│               └── heroku/
│                   └── chiller/
│                       └── service/
│                           └── WorkerProcess.java
├── pom.xml
└── Procfile

分步排查方案

  1. 核对包路径与类定义正确性

    • 确认WorkerProcess.java的包声明为package com.heroku.chiller.service;,类名拼写完全匹配(Java大小写敏感)。
    • 检查项目结构:src/main/java下的目录层级必须与包名一一对应,即com/heroku/chiller/service目录下必须存在WorkerProcess.java。
    • 确认main方法签名完全正确:public static void main(String[] args),不能有参数类型错误或访问修饰符错误。
  2. 验证Maven编译过程

    • 执行本地命令mvn clean compile,查看编译日志是否有错误。
    • 编译完成后,检查target/classes/com/heroku/chiller/service/目录下是否生成了WorkerProcess.class文件,若不存在说明编译失败或路径错误。
  3. 检查Maven打包时的主类配置

    • 如果使用普通jar包,需在pom.xml中通过maven-jar-plugin指定主类:
      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-jar-plugin</artifactId>
                  <version>3.2.0</version>
                  <configuration>
                      <archive>
                          <manifest>
                              <mainClass>com.heroku.chiller.service.WorkerProcess</mainClass>
                          </manifest>
                      </archive>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
    • 如果需要打包依赖(胖jar),使用maven-shade-plugin并指定主类:
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.2.4</version>
          <executions>
              <execution>
                  <phase>package</phase>
                  <goals>
                      <goal>shade</goal>
                  </goals>
                  <configuration>
                      <transformers>
                          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                              <mainClass>com.heroku.chiller.service.WorkerProcess</mainClass>
                          </transformer>
                      </transformers>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      
    • 执行mvn clean package后,本地测试运行:使用java -jar target/your-app-name.jar(若为胖jar),或java -cp target/classes:target/dependency/* com.heroku.chiller.service.WorkerProcess,确认是否能正常启动。
  4. 修正Procfile配置

    • 若直接运行类,必须指定完整classpath,Heroku环境下默认依赖在target/dependency/,所以Procfile命令应为:
      worker: java -cp target/classes:target/dependency/* com.heroku.chiller.service.WorkerProcess
      
    • 若使用jar包运行,需确保jar包路径正确,比如:
      worker: java -jar target/your-app-artifact-id-1.0-SNAPSHOT.jar
      
    • 本地直接执行Procfile中的命令,验证是否能启动,排除Heroku环境外的本地问题。
  5. Heroku部署日志检查

    • 查看Heroku部署日志,确认mvn clean install步骤是否执行成功,是否有编译错误或依赖缺失提示。
    • 确认Heroku识别到Maven项目,根目录下的pom.xml没有被移动或重命名。

内容的提问来源于stack exchange,提问作者Joe Bunda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:02