项目构建与部署
其实按照正常的学习顺序,项目的构建与部署应当安排在第一章,但是放在后面则说明本套学习笔记差不多应该结束了,一个项目到了不部署的阶段。
JAR
项目打包
本篇就不再新建SpringBoot项目了,而是使用第一个hellospringboot项目作为例子进行介绍。使用spring-boot-maven-plugin
插件可以创建一个可执行的JAR应用程序,前提是应用程序的parent为spring-boot-starter-parent
。在pom.xml文件中新增打包插件的build:
1 | <plugin> |
配置完成后,在当前项目的根目录(与pom.xml文件同级目录)下执行如下的Maven命令进行打包操作:
1 | mvn package |
如果你使用的开发工具为IDEA,那么可以单击右侧的Maven Project按钮,然后找到Lifecycle中的package,然后双击打包即可:
然后控制台开始输出打包信息,当最后输出BUILD SUCCESS
字段时,则表明该项目已经被打包成jar包。
打包成功后,在当前项目的根目录下找到target目录,target目录中就已经有了刚刚打包而成的jar包,且命名规则为项目名称-0.0.1-SNAPSHOT.jar
,如下图所示:
前面也说过这种打包方式的前提是项目使用了spring-boot-starter-parent
作为parent,不过在大部分项目中,项目的parent可能并不是spring-boot-starter-parent
,而是公司内部定义好的一个配置,此时spring-boot-maven-plugin
插件并不能直接使用需要多做一些额外的配置。此时应当在pom.xml文件中新增打包插件的build代码为:
1 | <plugin> |
配置完成后,就可以通过Maven命令或者IDEA中的Maven插件来进行打包,由于打包方式和前面的完全一致,因此这里就不再赘述。
项目运行
对于打包后的项目的运行,如果开发者使用的是windows系统,且已经安装了JDK,那么直接进入target目录下执行如下命令即可启动项目:
1 | java -jar hellospringboot-0.0.1-SNAPSHOT.jar |
如果开发者在Linux系统上允许SpringBoot项目,则需要确保Linux上安装了Java运行环境。关于在CentOS安装jdk,笔者有一篇文章专门进行了介绍,这里还是粘贴一下内容。安装jdk有两种方式,第一种是自动安装jdk(无法修改安装路径),另一种是手动安装jdk(手动配置安装路径)。
方式一:自动安装jdk(无法修改安装路径)的步骤如下:
第一步,使用yum -y list java*
命令查询要安装jdk的版本;
第二步,使用yum install -y java-1.8.0-openjdk.x86_64
命令下载安装jdk;
第三步,使用java -version
来检测是否安装成功,输出版本信息则表示java就已经默认安装在usr/lib/jvm/
目录下。
方式二:手动安装jdk(手动配置安装路径)的步骤如下:
第一步,点击 这里,登录oracle获取jdk1.8的各个版本信息,然后进入/usr/local/soft/
目录,在里面执行wget 下载链接
命令,或者是先下载到windows然后通过xftp上传到CentOS的该目录下,然后使用tar -zxvf jdk-8u241-linux-x64.tar.gz
命令进行解压;
第二步,使用vi /etc/profile
命令打开配置文件,在最底下输入以下信息:
1 | export JAVA_HOME=/usr/local/soft/jdk1.8.0_241 |
第三步,使用使用source /etc/profile
命令激活配置信息,然后使用java -version
来检测是否安装成功,输出版本信息则表示java就已经安装在/usr/local/soft/jdk1.8.0_241
目录下。
安装好了JDK以后,接下来通过XFTP或者其他工具将生成的JAR包上传到Linux上,然后执行如下命令来启动项目:
1 | java -jar hellospringboot-0.0.1-SNAPSHOT.jar & |
可以看到这比在Windows系统上多出了一个&
,它表示让项目在后台运行。由于在生产缓存中,Linux大多数情况下都是远程服务器,开发者通过远程工具连接Linux,如果使用上面的命令启动JAR,一旦窗口关闭,JAR也就停止运行了,因此一般通过如下命令来启动JAR:
1 | nohup java -jar hellospringboot-0.0.1-SNAPSHOT.jar & |
这里仅仅在该命令前面添加了nohup,表示当前窗口关闭时服务部挂起,继续在后台运行。
创建可依赖的JAR
正常情况下,SpringBoot项目是一个可以独立运行的项目,它存在的目的不是作为某一个项目的依赖,如果有一个项目需要依赖SpringBoot中的模块,最好的解决方案是将该方案单独拎出来,创建一个公共模块被其他项目依赖。但若由于其他原因导致该模块无法单独拎出来,此时不可以直接使用前面介绍的方法打包成JAR作为项目依赖,因为前面打包的JAR包是可执行JAR包,它的类是放在BOOT-INF目录下,如果直接作为项目的依赖,就会找不到类。一个可执行的JAR放入结构如下图所示:
因此,如果非要将一个SpringBoot工程作为一个项目的依赖,就需要配置Maven插件生成一个单独的artifact,这个单独的articfact可以作为其他项目的依赖,配置方式如下(假设项目的parent不是默认的spring-boot-starter-parent
)。在pom.xml文件中添加如下配置信息:
1 | <plugin> |
classifier指定了可执行JAR的名字,默认的JAR则作为可被其他程序依赖的artifact。配置完成后,对该项目进行打包,打包成功后可以发现在target目录下生成了两个JAR,如下图所示:
hellospringboot-0.0.1-SNAPSHOT.jar
是一个可以被其他应用程序依赖的JAR包,而hellospringboot-0.0.1-SNAPSHOT-exec.jar
则是一个可执行的JAR。可以对这两个JAR包分别进行解压,可以看到class的路径是不同的,如下图所示:
文件排除
想将SpringBoot项目打包成可执行JAR包,一般需要一些配置文件,如application.properties
或者application.yml
等,但若将SpringBoot项目打包成一个可依赖的JAR,这些配置文件很多时候又是不需要的,此时可以在打包时排除配置文件,只需要在pom.xml文件中新增以下配置:
1 | <!--打包成JAR包时排除application.properties配置文件--> |
在maven-jar-plugin
插件中配置排除application.properties
配置文件。配置完成后,对该项目进行打包,打包成功后可以发现在target目录下生成了两个JAR,如下图所示:
hellospringboot-0.0.1-SNAPSHOT.jar
是一个可以执行的JAR包,而hellospringboot-0.0.1-SNAPSHOT-lib.jar
则是一个可被外部程序依赖的JAR。对hellospringboot-0.0.1-SNAPSHOT-lib.jar
这个JAR包进行解压,可以看到里面已经没有application.properties
配置文件了,如下图所示:
WAR
在一些特殊情况下,需要开发者将SpringBoot项目打包成WAR包,然后使用传统的方式进行部署。打包成WAR包的配置步骤如下:
第一步,修改pom.xml文件。修改pom.xml文件,将项目打包成WAR包:
1 | <!--项目打包方式--> |
第二步,标记容器。修改pom.xml文件,将内嵌容器的依赖标记为provide,代码为:
1 | <dependency> |
第三步,提供一个SpringBootServletInitializer的子类。提供一个SpringBootServletInitializer
的子类,并覆盖其configure方法,完成初始化操作,代码如下:
1 | public class ServletInitializer extends SpringBootServletInitializer { |
经过以上三步的配置后,接下来就可以对项目进行打包了。打WAR包的方式和打JAR包的方式是一样的,打包成功后,在target目录下生成一个WAR包,将该文件复制到Tomcat的webapps目录下即可,注意不需要解压,然后启动Tomcat即可。JAR包内置了Tomcat等web容器,因此不需要额外安装Tomcat,但是WAR包必须先安装Tomcat,才能放在web容器内运行。
项目构建与部署小结
本篇主要介绍了SpringBoot项目不同的打包方式,开发者可以使用传统的WAR包部署,也可以使用SpringBoot官方推荐的JAR包部署, 两种部署方式各有优缺点,需要开发者根据实际情况来选择合适的部署方式。通常情况下,还是建议开发者优先选择JAR包方式进行部署。
那么到此,SpringBoot基础篇的学习就完成了,后续是对于SpringBoot的进阶学习。