0
点赞
收藏
分享

微信扫一扫

\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性

夹胡碰 2022-05-30 阅读 91

背景:

 java -jar .\SpringBootDemo-1.0-SNAPSHOT.jar --spring.profiles.active=dev

在运行打包以后的maven项目时,出现了如下报错信息
\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_maven

解决办法:

1、需要在项目根目录下的pom.xml文件中添加SpringBoot 构建的插件

  


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



repackage





\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_maven_02

pom.xml文件内容如下:



xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

com.zoneber
SpringBootDemo
1.0-SNAPSHOT

SpringBootDemo

http://www.example.com


UTF-8
1.7
1.7




org.springframework.boot
spring-boot-starter-parent
2.3.5.RELEASE






org.springframework.boot
spring-boot-starter-web




org.springframework.boot
spring-boot-starter-test
test




junit
junit
4.11
test








maven-clean-plugin
3.1.0



maven-resources-plugin
3.0.2


maven-compiler-plugin
3.8.0


maven-surefire-plugin
2.22.1


maven-jar-plugin
3.0.2


maven-install-plugin
2.5.2


maven-deploy-plugin
2.8.2



maven-site-plugin
3.7.1


maven-project-info-reports-plugin
3.0.0







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



repackage












 注意:XML结构不能乱,否则无法正常打包

 2、然后通过 mvn install 命令重新安装项目依赖

在运行mvn install的时候,自动生成这些主清单属性,运行java -jar xxx.jar时会根据主清单属性找到启动类,从而启动程序

3、再次通过mvn package 命令对maven项目进行打包 

D:\IdeaProjects\SpringBootDemo>mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.zoneber:SpringBootDemo >---------------------
[INFO] Building SpringBootDemo 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ SpringBootDemo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ SpringBootDemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ SpringBootDemo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\IdeaProjects\SpringBootDemo\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ SpringBootDemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ SpringBootDemo ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ SpringBootDemo ---
[INFO] Building jar: D:\IdeaProjects\SpringBootDemo\target\SpringBootDemo-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.5.RELEASE:repackage (repackage) @ SpringBootDemo ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.5.RELEASE:repackage (default) @ SpringBootDemo ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.820 s
[INFO] Finished at: 2022-05-27T16:52:50+08:00
[INFO] ------------------------------------------------------------------------

4、然后根据提示找到jar包存放的位置

\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_maven_03

\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_jar_04 

 对jar包进行解压, 以查看是否包含主清单属性需要的BOOT-INF,META-INF,org这三个文件夹

\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_maven_05

 

并且打开META-INF文件夹中的MANIFEST.MF文件查看程序的入口以及版本信息

Manifest-Version: 1.0
Implementation-Title: SpringBootDemo
Implementation-Version: 1.0-SNAPSHOT
Built-By: admin
Implementation-Vendor-Id: com.zoneber
Spring-Boot-Version: 2.3.5.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Start-Class: com.zoneber.MyApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.8.4
Build-Jdk: 1.8.0_40
Implementation-URL: http://www.example.com

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

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

5、然后通过java命令启动该项目,并激活开发环境(dev)的 Profile。

java -jar .\SpringBootDemo-1.0-SNAPSHOT.jar --spring.profile.active=dev

其中  --spring.profiles.active=dev 为激活开发环境(dev)Profile 的命令行参数

启动成功的效果图如下:

\SpringBootDemo-1.0-SNAPSHOT.jar中没有主清单属性_spring_06

举报

相关推荐

0 条评论