因为springboot本身集成了tomcat插件,所以我们可以直接使用mvn clean package命令打成jar包或者war包,然后使java -jar xxx.jar 或者 java -jar xxx.war命令非常方便的去部署运行项目。

但是在执行命令时提示:

PS F:\wkh_code\my-blog\target> java -jar myblog.war
myblog.war中没有主清单属性
PS F:\wkh_code\my-blog\target>

这里引出一个问题:主清单属性是什么

当我们把springboot项目打成war包或者jar后,解压之后我们可以发现一个名为META-INF文件夹。其中META-INF文件夹下有一个名为MANIFEST.MF的文件,该文件指明了程序的入口以及版本信息等内容,内容如下

Manifest-Version: 1.0
Implementation-Title: my-blog
Implementation-Version: 1.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: hua
Implementation-Vendor-Id: com.wangkaihua
Spring-Boot-Version: 1.4.0.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.WarLauncher
Start-Class: com.wangkaihua.myblog.Application
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_144
Implementation-URL: http://projects.spring.io/spring-boot/my-blog/

其中有Start-Class:指明了程序的入口类、Spring-Boot-Classes:指明了类的路径,所有编译后的class文件还有Spring-Boot-Lib等等,这些都是springboot项目独立运行必须要知道的。所以应该是我们打包的姿势不对,我们缺少了一个打包插件:spring-boot-maven-plugin

这里引出第二个问题:spring-boot-maven-plugin作用

Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。

解决方法

在pom.xml中引入对spring-boot-maven-plugin插件的依赖

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

执行mvn clean package,将自动生成必要的主清单属性,运行java -jar xxx.jar或者java -jar xxx.war时会根据主清单属性找到启动类启动程序。

参考:

没有主清单属性

springboot maven插件详解

xxx.jar或者xxx.war中没有主清单属性和spring-boot-maven-plugin的作用的更多相关文章

  1. xxx.jar 中没有主清单属性

    springboot  中是可以通过 jar 将整个项目打包成一个fat jar 的, 这个大家都知道. <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --&g ...

  2. eclipse maven .jar中没有主清单属性

    报错环境: windows系统eclipse maven 打包jar包后, 运行 java -jar 报错 E:\My_java\mysql\target>java -jar original- ...

  3. 执行jar包报错:udfFull.jar中没有主清单属性

    在windows系统的cmd命令行窗口中执行: java -jar udfFull.jar {"movie":"1287","rate":& ...

  4. 启动SpringBoot的可执行jar 报错:target\spring-boot-hello-1.0-SNAPSHOT.jar中没有主清单属性

    打包成功,但是在执行时报错,没有主清单属性 解决: 增加红框内的依赖: <build> <plugins> <plugin> <groupId>org. ...

  5. jar中没有主清单属性

    在导出jar时指定主类位置 或手动配置jar包中的MANIFEST.MF文件: 添加Main-Class: gui 参考: JAVA环境变量 CLASSPATH .;%JAVA_HOME%\lib\d ...

  6. 解决Maven 编译出的jar中没有主清单属性

    出现这个问题的原因是 pom 中没有添加主程序入口 在配置中添加如下配置 <plugin> <groupId>org.apache.maven.plugins</grou ...

  7. idea jar 中没有主清单属性

    idea 中maven需要有插件 <build> <plugins> <plugin> <groupId>org.springframework.boo ...

  8. jar中没有主清单属性【解决办法】

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compi ...

  9. java -jar .jar中没有主清单属性

    pom里加上 <build> <plugins> <plugin> <groupId>org.springframework.boot</grou ...

随机推荐

  1. SpringCloud入门之YAML格式文件规范学习

    1. 认识 YAML YAML(发音 /ˈjæməl/)是一个类似 XML.JSON 的数据序列化语言.其强调以数据为中心,旨在方便人类使用:并且适用于日常常见任务的现代编程语言.因而 YAML 本身 ...

  2. python实战学习之numpy学习

    numpy基础要点 1.生成数组 np.array([]) 2.变量的类型 numpy.ndarray 3.数据的类型 int8,float64,float32,bool等 4.数据的类型转换 x.a ...

  3. docker常用命令2

    Docker作为一种开源的.优秀的容器化技术,目前受到越来越多公司的运用,下面是我工作中常用到的一些命令. 1.删除一个容器(删除之前先要停止该容器) docker stop 容器IDdocker r ...

  4. TensorFlow中的通信机制——Rendezvous(一)本地传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在TensorFlow源码中我们经常能看到一个奇怪的词——Rendezvous ...

  5. 【Redis】2、CentOS 7 上安装 redis3.2.3安装与配置

    一.redis源码安装 [更正]现在最新稳定的版本已经到了3.2.8 截至到2016.8.11,redis最新稳定版本为3.2.3.本篇文章我们就以此版本为基础,进行相关的讲解. 下载redis源码, ...

  6. 使用JavaScript获取URL中的参数(两种方法)

    本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = ...

  7. angular bootstrap timepicker TypeError: Cannot set property '$render' of undefined

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. select&epoll

    内核空间和用户空间 现在操作系统都是采用虚拟存储器,那么对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方).也就是说一个进程的最大地址空间为 4G.操作系 ...

  9. 2018-11-04 在线代码离线翻译Chrome插件"一马"v0.0.14

    续前文: 在线代码离线翻译Chrome插件"一马"v0.0.8. 主要改进如下. 项目源码库: program-in-chinese/webextension_github_cod ...

  10. angularJS中控制器和作用范围

    $scope是$rootScope的子作用域控制对象,$rootScope的id为1,其他的为2,3,4... 不同的控制器之间,所对应的作用域控制对象$scope,之间是相互隔离的,如果要共享数据, ...