因为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
时会根据主清单属性找到启动类启动程序。