Springboot打包部署(七)
一、前言
作为后台开发,项目打包部署是经常性的操作。当我们完成某一阶段的开发之后就要进入测试阶段,这就需要我们打成jar或者war包部署在服务器,方便测试人员进行测试。spring boot打包有多种方式,比如打成jar、或者war,亦或者通过jekins进行打包部署。
本篇文章主要介绍怎么如何打成**jar**和**war**部署。
二、 jar形式
2.1 在pom.xml中添加插件
<groupId>com.example</groupId>
<artifactId>springboot-upload</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
//注意把packaging标签改为jar,此标签也可不写,默认打包方式为jar。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
2.2 idea插件打包
在IDEA右侧Maven Projects栏双击package等待Build Success即可
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70][]
2.3 maven命令行打包
**a.**黑窗口cd到根目录(和pom.xml、target同级),也可在idea工具中选择Terminal
**b.**执行打包命令 mvn clean package (跳过测试类命令 mvn clean package \-Dmaven.test.skip**=**true)
![20190511143616206.png][]
**c.** 出现如下表示打包成功:
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 1][]
2.4 启动项目
** a.**打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar。如下图
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 2][]
启动项目:在windows下,cmd到target目录下,也可在target目录下按shift+右键打开命令行,然后执行java -jar 项目名+版本号.jar。
**b.**现演示在**Linux**下操作:首先把jar包通过xshell等工具上传到指定的**Linux**文件夹下,我这上传位置为**home/project**
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 3][]
**c.**输入java -jar springboot-upload-0.0.1-SNAPSHOT.jar
![20190511143944905.png][]
这种方式启动有一个弊端,就是只要控制台关闭,服务就不能访问了。通过以下命令可以确保关闭后也可运行,即后台运行的方式启动:
nohup java -jar springboot-upload-0.0.1-SNAPSHOT.jar &
也可以在启动的时候选择读取不同的配置文件
java -jar springboot-upload-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
2.5)出现的问题
**解决方案:**
(1)配置中添加 spring.thymeleaf.prefix=classpath:/templates
(2)指向模板的路径 不加 /
三、 war形式
打成war包放到tomcat服务器下。
3.1) pom.xml中把jar改成war
<packaging>war</packaging>
3.2) 添加外置tomcat依赖
<!--打包时排除tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
在这里将 **scope** 属性设置为 **provided**,这样在最终形成的 **WAR** 中不会包含这个**JAR**包,因为**Tomcat**或**Jetty**等服务器在运行时将会提供相关的API 类。
3.3) 在入口类中继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class SpringbootUploadApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootUploadApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(SpringbootUploadApplication.class);
}
}
3.4) 输入命令 mvn clean package打包,把target目录下生成的war放到tomcat的webapps目录下即可。
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 4][]
然后cd到tomcat的bin目录下,执行./startup.sh。
![20190512085410332.png][]
在tomcat运行时会自动将war解压
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 5][]
启动浏览器访问,这样打包war并部署就完成了。
![20190512085810255.png][]
3.5) 出现的问题
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zm9yZXZlcmxvdmU_size_16_color_FFFFFF_t_70 6][]
网上说可能tomcat版本问题或者tomcat中某些文件修改了,我当时选的版本是tomcat7 ,然后改成tomcat8就能正常启动和访问了。
3.6) 总结
1、pom文件中jar改成war
2、添加外置的tomcat依赖
3、入口类继承SpringBootServletInitializer并重写configure方法
4、项目访问路径 ip:port/jar名称
5、tomcat版本问题
四、 最后
至此spring boot打包jar和war介绍完毕。
欢迎大家关注微信公众号!
还没有评论,来说两句吧...