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

Docker执行Jar包遇找不到主类错误(GCP环境)求助

解决Docker镜像在GCP运行时“找不到或无法加载主类”的问题

以下是针对该问题的排查和解决方案:

1. 确保Jar包包含主类信息

你的pom.xml仅通过exec-maven-plugin指定了主类,但这个插件仅用于本地代码执行,不会将主类信息写入Jar包的MANIFEST.MF文件。而java -jar命令运行时,JVM需要从MANIFEST.MF的Main-Class条目定位主类,因此必须添加maven-jar-plugin配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.main.Main</mainClass>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
</plugin>

如果是Spring Boot项目,建议改用spring-boot-maven-plugin,它会自动生成包含主类的可执行Jar包:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.7.15</version> <!-- 替换为你的Spring Boot对应版本 -->
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>com.main.Main</mainClass>
    </configuration>
</plugin>

2. 修正Dockerfile的路径与执行命令

  • 优化Jar包复制逻辑:当前Dockerfile复制了target/abc-SNAPSHOT/整个目录到/usr/app/,但需确认该目录下确实存在abc-SNAPSHOT.jar。更稳妥的方式是直接复制Jar包,避免多余文件干扰:
COPY target/abc-SNAPSHOT.jar /usr/app/
  • 修复环境变量无效问题:CATALINA_OPTS是Tomcat专属参数,对java -jar运行方式无效,建议改为JAVA_OPTS并调整ENTRYPOINT格式(exec格式无法直接解析环境变量,需通过shell执行):
ENV JAVA_OPTS="-Denv=otps"
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /usr/app/abc-SNAPSHOT.jar"]

3. 本地验证Jar包有效性

构建Docker镜像前,先在本地执行java -jar target/abc-SNAPSHOT.jar,确认Jar包能正常启动,排除Jar包本身的问题。

4. 排查镜像内文件路径

可在Dockerfile中添加目录查看命令,验证Jar包是否存在:

RUN ls -la /usr/app/

构建镜像后本地运行,查看输出确认abc-SNAPSHOT.jar的存在及路径正确性。

内容的提问来源于stack exchange,提问作者jitendra varshney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:40:26