Spring Boot 初级入门教程(十) —— 打完整 jar 包、部署和测试
不知不觉都第十篇了,用了这么久,都是在本机运行,localhost 还是不爽,加上目前 jsp 页面已配置,可以做几个炫一些的页面,挂服务器上试试。那么问题来了,如何打包、部署呢?接下来开始尝试打包,Spirng Boot 默认配置是 jar 包,那首先来尝试一下 jar 包的打包、部署和测试。
在文章开始之前,首先删除配置文件的部分配置,如下:
<!-- Add Spring repositories --><!-- (you don't need this if you are using a .RELEASE version) --><repositories><repository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url></pluginRepository><pluginRepository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url></pluginRepository></pluginRepositories>
注释的意思是:
<! - 添加Spring存储库 - >
<! - (如果您使用的是.RELEASE版本,则不需要此项) - >
官网解释:
If you use a milestone or snapshot release, you also need to add the appropriate pluginRepository
elements.
大概意思:如果使用里程碑或快照版本,则还需要添加相应的pluginRepository元素。
所以这里先把这部分配置删除, 因为目前项目用的是 2.0.2.RELEASE 版本。
一、打 jar 包。
如果不做任何的配置,直接打包:选中项目-》右键-》Run as -》4 Maven build -》弹出框 Goals 栏输入 -X package -》点击 Run 按钮,则打包开始。如果出现错误,可以尝试做下面两步操作:
第一步:选中项目-》右键 -》Maven -》Update Project。
第二步:选中项目-》菜单 -》Project -》Clean。
备注:上面 IDE 是英文环境,如果你的是中文,请简单翻译,对照操作。
如果打包成功,可以在 target 目录看到自己期盼已久的 jar 包,如图:
上传到 linux 服务器。可以看到这个包非常小,不到 14k:
运行试下效果,总觉得有点悬:
启动命令:java -jar test-springboot-1.0.jar
查看 jar 包,找到 test-springboot-1.0.jar\META-INF\MANIFEST.MF,内容如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: LangLang
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_172
确实少 main 方法,因为这是 Spring Boot 启动的入口,看来打包有问题,缺配置。
修改 pom.xml 配置文件:
<build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><fork>true</fork><mainClass>com.menglanglang.test.springboot.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
继续打包,打包后可以再看看 test-springboot-1.0.jar\META-INF\MANIFEST.MF 文件的内容:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: LangLang
Start-Class: com.menglanglang.test.springboot.App
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.0.3.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_172
Main-Class: org.springframework.boot.loader.JarLauncher
内容明显比之前多很多,而且有了 Start-Class 等信息,而且 jar 包的大小也变为近 20M。
上传服务器,再次运行测试,结果如下:
看来打包部署算是成功了。
二、测试
打开浏览器,访问下前几篇测试的链接,看看结果是否一致。
访问:http://192.168.220.254:8080/cfg/outStr1
访问:http://192.168.220.254:8080/cfg/outStr4
访问:http://192.168.220.254:8080/jsp/testJspPage
打开 jar 包后发现,jar 包中并没有打入 jsp 页面部分,所以继续修改 pom.xml 配置,如下:
<build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><fork>true</fork><mainClass>com.menglanglang.test.springboot.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><resources><resource><directory>${basedir}/src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/**</include></includes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>**/**</include></includes></resource><resource><directory>src/main/webapp</directory><filtering>false</filtering><includes><include>**/**</include></includes></resource></resources></build>
打包,部署,测试,发现还是不能访问页面。查其原因,官网说法:
JSP limitations
When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.
- With Jetty and Tomcat it should work if you use war packaging. An executable war will work when launched with
java -jar
, and will also be deployable to any standard container. JSPs are not supported when using an executable jar. - Undertow does not support JSPs.
- Creating a custom
error.jsp
page won’t override the default view forerror handling,custom error pagesshould be used instead.
大概意思:
JSP 限制
当运行使用嵌入 servlet 容器的 Spring Boot 应用程序(并打包为可执行包)时,JSP 支持存在一些限制。
- 使用 Jetty 和 Tomcat,如果使用 war 包,它应该可以工作。使用 java -jar 启动时,可执行的 war 也将起作用,并且还可以部署到任何标准容器。 使用可执行 jar 包时不支持 JSP。
- Undertow不支持JSP。
- 创建自定义 error.jsp 页面不会覆盖错误处理的默认视图,而应使用自定义错误页面。
看来是 Jar 包不能很好的支持访问 jsp 页面导致。
是不是打包的插件有问题,如果不设置版本,应该是最新版本,也就是 2.0.2,指定一个老版本再试试,比如 1.4.0。修改配置后如下:
<build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.4.0.RELEASE</version><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><!-- 。。。此处省略n行 --></build>
再次部署测试,居然能看到 jsp 页面内容,只是加载特别慢,如图:
但在 1.4.0 的官方文档中,也有 JSP limitations 部分说明。
顺便,又试了下 1.5.x 系列的版本,结果和 2.0.x 一样,所打包的 jar 都是不能访问 jsp 页面的,其它版本大家可以自行尝试。
猜测,Spring Boot 刚开始也是想支持 jsp 的,可能由于支持不是很好,所以在后续版本中,逐渐取消了 jsp 的支持。
Spring Boot 初级入门教程(十) —— 打完整 jar 包、部署和测试相关推荐
- jdbctemplate mysql 配置_Spring Boot 初级入门教程(十四) —— 配置 MySQL 数据库和使用 JdbcTemplate 测试...
经过前面几篇文章,包已经可以打了,不管是 jar 包还是 war 包都已测试通过,jsp 页面也可以访问了,但页面上的数据都是在配置文件中写死的,不爽 ~ 到目前为止,最重要的配置还没做,那就是连数据 ...
- spring boot 瘦身打包排除其他依赖jar包
一个普通的spring boot项目差不多就要50M左右的大小,随着项目的进行,代码包大小才1M以内,对于我们开发人员来说是一种极大的痛苦,查找了一下网上的资源, 在<excludeGroupI ...
- Spring Boot项目源码启动正常,打成jar包后启动报错找不到主类
java -jar .\target\demo-0.0.1-SNAPSHOT.jar personal-demo-0.0.1-SNAPSHOT.jar中没有主清单属性 网上翻了,大多都是说在pom.x ...
- Vue + Spring Boot 项目实战(十五):动态加载后台菜单
重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...
- Spring Boot从入门到精通(超详细)
Spring Boot从入门到精通(超详细) _kayden_ 2020-07-20 15:19:22 9491 正在上传-重新上传取消 收藏 184 分类专栏: springboot 文章标签: ...
- Spring Boot WebFlux 上手教程
Spring Boot WebFlux 上手教程 背景 大家都知道,Spring Framework 是 Java/Spring 应用程序跨平台开发框架,也是 Java EE(Java Enterpr ...
- 芋道 Spring Boot 快速入门
点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...
- Spring Boot 操作 Redis教程
Spring Boot 操作 Redis教程 在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了 使用 Java 操作 Redis 的方案很多,Jedis 是 ...
- 视频教程-Spring boot快速入门-Java
Spring boot快速入门 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥12.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...
最新文章
- 谣言止于智者:基于深度强化学习的谣言早期检测模型
- workerman mmo_2020了,我们为什么还在做MMO端游
- 【windows】安装pytorch1.7.1-cpu版本的geometric过程记录
- Flask == scoped_session
- 小白也能看懂——使用dev-c++建立工程(多个文件一同编译连接)并运行
- MySQL必知必会(使用子查询)
- 漫画:高并发下的HashMap
- Java面试知识点:红黑树、Stream流
- 安装GIT,集成到Powershell中
- DoraHacks的笔记
- webview 加载时闪烁黑一下_Web端页面加载卡顿缓慢问题解决方法分享
- 最简单又最复杂的单例模式
- cr3格式是什么意思_如何用PS导入佳能CR3格式图片?
- cnpm下载依赖包速度快的原理探究
- 新能源专属车险可在线投保 80%车主基准保费下降
- python数列求和_python练习--数列求和
- html规范eml文件,eml文件【操作办法】
- illegal offset type php,PHP warning Illegal offset type错误解决办法
- android第三方浏览器存在泄露用户隐私漏洞
- Tunnello安装指南
热门文章
- 【Matplotlib】python绘图,同时沿x、y、z轴方向渐变颜色(按多轴渐变色)
- foxmail收件服务器用户名,谁用Foxmail邮箱呀 我在iPhone添加邮箱 有谁知道收件服务器怎么填...
- Spark RDD与DataFrame相互转换
- python 利用Unicode编码获得十二星座符号
- vue elmenetui admin表格筛选列(动态显示)
- IN286 ADC采样电路的模拟仿真(Tina软件)
- 手机投屏电视android限制声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...
- 【业务理解】数据指标
- 手机打开游戏显示无法连接服务器,玩手机游戏提示无法连接服务器
- 公共DNS服务器整理