package打包jar运行报错-no main manifest attribute
解决了package打包带jar包运行时候找不到主类进行加载,报错no main manifest attribute 错误
·
jar运行报错no main manifest attribute
今天自己学习Docker的时候,复制package的jar到docker中,运行的时候发现总是出现错误:
**原因:**找不到主类进行加载,一般情况下,java 打包成 jar 包需要在 MANIFEST.MF 中指定 Main-Class项,以便运行 java -jar xxx.jar 时找到对应的主类。
将打包的jar解压后检验是否包含主类的文件:
内容如下:
Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: administered
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.example.DockerTestApplication // jar包的入口类
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.6.13
Created-By: Apache Maven 3.8.1
Build-Jdk: 1.8.0_331
Main-Class: org.springframework.boot.loader.JarLauncher
如果没有 Start-Class:
入口类则表示无法进行加载
解决办法一
如果pom文件的build -> plugins
缺少打包的文件则需要添加如下代码
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.DockerTestApplication</mainClass>
<finalName>example</finalName>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- mainClass 标签里是你的项目的启动类的包路径,如果你的项目没有有启动类也不需要通过 java -jar 运行的话可以删除mainClass
- finalName 标签里的就是打出来的 jar 名,我这里是 XTool ,最终生成的就是 XTool.jar 。若不使用 finalName 指定,则打包生成的 jar 包名默认使用 pom.xml 文件里 artifactId 标签和 version 标签里的值作为 jar 的名。
- 如果你希望最终生成的 jar 包不包含第三方依赖那直接用上面的插件配置即可。如果希望最终生成的 jar 包里包含第三方依赖那就删
配置完成以后可以点击package进行打包
打包完成以后可以在target
默认文件夹下查看刚刚打包好的jar文件
解决办法二
如果自己的pom文件和上面的文件类似的,可以查看一下自己的项目入口是否有<skip>
标签
我开始的pom文件和解决方法一其实很相似,但是就是多了这一个跳过编译的标签,所以直接跳过了项目入口的编译过程。导致找不到入口函数。去掉以后可以轻松进行编译。
似,但是就是多了这一个跳过编译的标签,所以直接跳过了项目入口的编译过程。导致找不到入口函数。去掉以后可以轻松进行编译。
更多推荐
已为社区贡献1条内容
所有评论(0)