问题:
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.类名