工具版本
- IDEA 2019
- SpringBoot 2.6.13
- apache-maven-3.6.0
在Spring Boot 项目中, 使用Maven 打包, 得到可以直接运行的jar包,
此时经常会出现没有主清单属性的报错,
或者打包的结果是一个不包含依赖包的项目,
也不能直接通过 java -jar 命令运行
问题描述
在学习Spring Boot框架时, 遇到需要打包项目为Jar包的情况,
此时直接使用Maven工具中的package命令可以非常快捷的得到一个Jar包,
但是使用此种方式得到的Jar包可能有两种结果, 一种是只包含项目本身内容的Jar包,
这种Jar包并不能直接使用JDK的java -jar命令运行, 也不能直接发布到服务器上,
还有一种就是包含项目用到的依赖包的Jar包, 情况正好相反.这两种Jar包的文件结构也大有不同
本人对其中细节并不了解,
但值得注意的是, 包含依赖的Jar包中都会有一个BOOT_INF文件夹,
其中包含一个lib文件夹, 此处正是项目的依赖所在
解决办法
那么, 如何才能得到自己想要的Jar包呢, 最核心的问题是pom.xml文件的配置
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.itheima.Chapter06Application</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
本人用的是2021版的 IDEA, 以上是创建Maven项目时, 自动创建的,
在我反复的试错之后, 猛然发现,
问题的关键在于 <configuration>
标签下的<skip>
子标签,
<skip>
标签为true时, 只会的到不包含依赖的Jar包,
删去 <skip>
标签, 会得到上述两种类型的Jar包,
不包含依赖的那个文件结尾是 orginal
, 自行去掉.orginal
后缀便可使用
结论
<skip>
标签设置为false
, 或者直接删去, 会得到两个Jar包, 包含依赖的, 不包含依赖的都有, 包含依赖的可以直接运行<skip>
标签 设为true
, 只能得到不包含依赖的Jar包, 不能直接运行