创建一个可执行的JAR包的步骤如下。
首先,选中项目Springboothelloworld,然后右击它,在弹出的菜单中,选择“Run As”→Maven install”,如图3-10所示。
▲图3-10 选择“Run As”→Maven install”选项
若遇到如下运行错误,则说明出现Java的版本冲突问题。
[ERROR] Failed to execute goal org.apache.maven.plugins: maven-compiler-
plugin:3.8.1:compile (default-compile) on project springboothelloworld: Fatal
error compiling: 无效的目标发行版: 17 -> [Help 1]
下面介绍一下该问题的解决方法。首先,在命令行中,输入“java –version”命令,查看Java版本,如图3-11所示。
▲图3-11 查看Java版本
然后,将pom.xml文件中java.version的值修改为1.8。
<properties>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
接着,先执行Maven clean,再执行Maven install,提示如下错误。
[ERROR] Failed to execute goal org.apache.maven.plugins:
maven-surefire-plugin:2.22.2:test (default-test) on project
springboothelloworld: There are test failures.
按照错误提示,添加maven-surefire-plugin依赖项,具体代码如下。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
再次执行Maven install,运行结果如图3-12所示。此时,就创建了一个可执行的JAR包。
▲图3-12 运行结果
创建可执行的JAR包后,进入target目录,执行图3-13所示的命令。
▲图3-13 执行JAR包
现在看一下控制台,Tomcat在端口8080(HTTP)上启动。然后,打开Web浏览器并访问http://localhost:8080/hello,运行结果如图3-14所示。
▲图3-14 JAR包执行结果
Spring Boot项目与传统项目最大的区别:传统项目中,打包生成WAR包并部署到服务器上,需要额外的Servlet容器;而Spring Boot项目中,直接打成JAR包,并内置Servlet容器,也就是说,通过命令 Java -jar xx.jar直接运行JAR包,不需要额外的Servlet容器。
在解压缩springboothelloworld-0.01-SNAPSHOT.jar后,我们看一下JAR包中META/INF/ MANIFEST.MF文件的内容,其中的Start-Class指定要启动的实际入口类(即包含main()方法的类)。对于入口类,推荐将它放在项目的顶层包中,其他的类放在顶层包的子包中。MANIFEST.MF文件的内容如图3-15所示。
▲图3-15 MANIFEST.MF文件的内容
spring-boot-loader模块允许Spring Boot支持可执行的JAR和WAR包。在MANIFEST.MF文件中,将Main-Class属性设置为程序JAR包的启动类JarLauncher,实现Spring Boot应用程序的启动。