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

运行Spring Boot微服务Docker镜像时遇No main manifest错误求助

SpringBoot微服务容器化运行报错:找不到主类的解决办法

问题

SpringBoot+Maven微服务,Docker镜像构建成功,但容器启动时报错:Error: Could not find or load main class com.example.demo.DemoApplication。已在主pom.xml添加spring-boot-maven-plugin,问题仍存在。

相关配置

  • Dockerfile:
FROM openjdk:17-jdk-slim
VOLUME /tmp
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • 项目结构:父工程下包含多子模块,主应用模块为demo,主类DemoApplication路径src/main/java/com/example/demo/
  • 主pom.xml插件配置:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>3.0.5</version>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

解决步骤

1. 验证本地Jar包是否可执行

先排除打包问题:

  • 执行mvn clean package后,在本地运行java -jar target/demo-0.0.1-SNAPSHOT.jar,看能否正常启动。如果本地也报错,说明打包未生成可执行Jar。
  • 查看Jar包结构:运行jar tf target/demo-0.0.1-SNAPSHOT.jar,检查是否存在BOOT-INF/classes/com/example/demo/DemoApplication.class,同时查看META-INF/MANIFEST.MF是否包含:
    Main-Class: org.springframework.boot.loader.JarLauncher
    Start-Class: com.example.demo.DemoApplication
    
    缺少这两行说明插件未正确打包。

2. 确保插件配置在主应用模块

多模块项目中,spring-boot-maven-plugin必须配置在主应用模块(demo)的pom.xml中,而非仅在父pom的<pluginManagement>里。子模块pom需明确引入:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3. 修正Dockerfile的Jar包路径

部分情况下,插件会生成带-exec后缀的可执行Jar,检查target目录下的Jar名称,修改Dockerfile:

COPY target/demo-0.0.1-SNAPSHOT-exec.jar app.jar

或用通配符简化(确保target下只有一个可执行Jar):

COPY target/*.jar app.jar

4. 正确执行多模块打包

如果从父工程打包,需指定主应用模块:

mvn clean package -pl demo -am

-pl demo指定打包demo模块,-am自动构建依赖模块,避免生成普通Jar。

内容的提问来源于stack exchange,提问作者Thiago Salgado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:15:31