docker 运行容器,提示 no main manifest attribute, in /xxx.jar

该问题源于MANIFEST.MF文件中未指定Main-Class主类。解决方案包括在pom.xml中添加spring-boot-maven-plugin进行重新打包,直接编辑MANIFEST.MF指定Main-Class,或者在运行jar包时使用-cp或--classpath手动指定主类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:
docker run -p 40002:40002 intelligent-posture-image
no main manifest attribute, in /intelligent-posture-image.jar

原因:这个问题主要是因为MANIFEST.MF文件内没有指定启动Main-Class主类

三种解决方式

一、pom.xml 中添加下方代码,再重新打包

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

 build-info.properties

build.artifact=xxx
build.group=org.example
build.name=项目名称
build.time=2023-03-13T08\:05\:59.617Z
build.version=1.0-SNAPSHOT


二、指定MANIFEST.MF文件内容中的启动Main-Class主类

MANIFEST.MF 

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: name
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: 类路径.main类名称
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.6.7
Created-By: Apache Maven 3.8.6
Build-Jdk: 1.8.0_201
Main-Class: org.springframework.boot.loader.JarLauncher

三、一般情况下,java 打包成 jar 包需要在 MANIFEST.MF 中指定 Main-Class 项,以便运行 java -jar xxx.jar 时找到对应的主类。因为-jar的含义就是后面跟的jar包是有main class可独立运行,所以需要在打包成jar包时指定这个类;否则,需要在执行的时候手动指定。
解决方案:


在运行jar包时,使用 -cp / --classpath 来手动指定。
java -cp xxx.jar com.juanxinc.xxx.类名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值