异常处理(七)--------initializr-service.jar中没有主清单属性

异常详情

initializr-service.jar中没有主清单属性

问题背景

今天自己做了个SpringBoot项目生成服务器,把jar包传到线上,命令运行后查看log发现这个问题。

命令:

nohup java -Xms128m -Xmx256m -jar -Dfile.encoding=utf-8  initializr-service.jar > log.text&

解决办法

方法一

将打好的jar包用解压工具打开(注意不是直接解压),然后修改/META-INF/MANIFEST.MF文件,加上配置

Main-Class: sample.service.ServiceApplication

后面是我们主类的路径及类名,注意冒号后main是有一个空格的

方法二

在pom文件中增加插件

        
  		org.springframework.boot
 		spring-boot-maven-plugin
  	

 手头上有事,暂时没有试这个方法,打算晚点试一下

总结

以SpringBoot为例,jar包中包含了三个文件夹:BOOT-INF,META-INF,org,可以把jar包解压到文件夹下查看,其中META-INF文件夹下有一个MANIFEST.MF文件,该文件指明了程序的入口以及版本信息等内容,如下

Manifest-Version: 1.0
Implementation-Title: spring-xxx-xxx
Implementation-Version: 0.0.1-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: XXXX
Implementation-Vendor-Id: com.huyikang.practice
Spring-Boot-Version: 1.5.9.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.huyikang.practice.eureka.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_151
Implementation-URL: http://maven.apache.org

 

  • Main-Class代表了Spring Boot中启动jar包的程序
  • Start-Class属性就代表了Spring Boot程序的入口类,这个类中应该有一个main方法
  • Spring-Boot-Classes代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径下
  • Spring-Boot-Lib表示依赖的jar包存储的位置

这些值都是SpringBoot打包插件会默认生成的,如果没有这些属性,SpringBoot程序自然不能运行,就会报错:jar中没有主清单属性,也就是说没有按照SpringBoot的要求,生成这些必须的属性。

你可能感兴趣的:(SpringBoot,错误异)