java -jar 运行idea打包的jar包没有主清单属性

本文详细解析了Maven生命周期及其与插件的关系,特别聚焦于spring-boot-maven-plugin如何将Spring Boot项目打包成可运行的jar或war。通过对比maven-jar-plugin和spring-boot-maven-plugin的功能,阐述了repackage目标的重要性,以及如何解决打包后的jar无法直接运行的问题。

maven生命周期都是抽象的,实际的操作由插件去完成。

package生命周期实际是由 maven-jar-plugin去完成;

spring-boot-maven-plugin该插件是专门服务于springboot的maven项目,旨在把springboot项目打包成可运行的jar或war。
需要搭配以下几个goal使用,否则和maven本身的一些插件没什么差别

可用的目标功能有:

run  repackage  start stop build-info

以打包jar为例,如果我们没有搭配使用上述的goal,则会默认使用maven本身的插件去完成任务

在没有用<parent></parent>标签做声明的情况下

使用下面的构建插件配置

双击package

打包流程:

[INFO] Scanning for projects...   
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building com-oo 1.0-SNAPSHOT         
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ com-oo ---    //复制主资源文件到主输出目录
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ com-oo ---   编译主代码到主输出目录
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ com-oo ---  //复制测试资源文件到测试资源目录
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\project\comoo\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ com-oo ---  //复制测试代码到测试目录
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ com-oo ---  //执行测试用例
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ com-oo ---   //创建项目jar
[INFO] Building jar: D:\project\comoo\target\com-oo-1.0-SNAPSHOT.jar 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.636 s
[INFO] Finished at: 2018-12-21T14:08:57+08:00
[INFO] Final Memory: 15M/221M
[INFO] ------------------------------------------------------------------------

 

最后打包出来的jar无法用java -jar 启动起来,会出现:

***.jar没有主清单属性

解决办法有:

1.在pom文件用<parent>标签声明springboot starter parent 包括版本号。则goal会默认为repackage

2.添加repackage功能到插件中,即在你点击package之后打包成的jar之后再将这个jar重新打包成可运行的jar

将原先的jar包改成.original为后缀的文件。

两个文件差别在于多个一个BOOT-INF目录以及META-INF/MANIFEST.MF的文件有所不同。

MANIFEST.MF文件不同在于多了一下几行:

Start-Class: org.myy.drips.WebApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.5.7.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher

根据两个方式之一重新打包字后,日志窗口比原先多了几行

[INFO] 

[INFO] --- spring-boot-maven-plugin:1.5.7.RELEASE:repackage (default) @ com-oo ---  //重新打包jar项目为新的可运行的jar,并将原先的jar的后缀名改为.original

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值