使用Spring Boot Gradle 打war包的一点心得体会

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

作者|杨旭

来源|https://my.oschina.net/alexnine

最近实验室的一些项目采用了Spring Boot架构进行开发。项目完成以后,就需要部署到服务器。常规办法就是将项目打成war包,直接拖到tomcat的webaaps下,但是Spring boot 的默认是将项目打成jar包,所以就需要进行一些配置。百度和Google了配置方法都是大同小异。

不过网上的例子大部分都是使用的是Eclipse+Maven ,我们实验室使用的idea+gradle。所以就有一些小的变化,不过都是相通的。需要修改的地方是:

  1. Application中

这里继承SpringBootServletInitializer 并重写其中的configure方法目的是使用Spring框架的Servlet3.0支持。并且允许我们可以配置项目从serclet容器中启动。

  1. 在build.gradle里配置

主要是添加war包的支持,其次的话就是在spring-boot-starter-tomcat处改为provided。provided和compile的区别在与前者是在调试使用时会加载对应的包,但是 在打包时不会讲对应的包加入到war包的lib中而后者则是两种情况都要调用对应的包。

  1. 至此基本的配置都已经完成了。前面的工作的目的都是防止Spring Boot中内置的Tomcat 与实际的tomcat容器产生冲突。 这样的话一个常规的Spring Boot项目就可以直接打包部署,但是今天在部署另外一个项目时遇到了一个奇葩的问题(经验不足。。。),项目在启动时报如下的错:

排查了好久,终于在Stackoverflow(不得不说是程序猿的好帮手啊)找到了解决办法,外国兄弟和我遇到了同样一个问题。

下图是解决方式之一,他的意思大概是tomcat中的websocket jars与项目中的包冲突了,建议是删除产生对应的包。并贴图列举了哪些包是造成问题的原因。但是按照他的办法并没有解决我的问题,还是同样的错误。

于是我继续向下看,发现了另外一个解决办法:

按照这个办法在build.gradle中找到对应的代码,注释掉,重启服务器,项目成功启动。

分析其中的原因:原来是这个项目中多引用了Spring-boot-starter-jetty这个包,与tomcat容器产生了冲突。导致 了启动失败。

以后还需要多分析和细心检查

另外贴上Spring boot打包的一篇文章:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

Ps.如有错误还请各位大大指教。

拓展阅读:

深入理解遗传算法(一)

深入理解遗传算法(二)

从1到100求和学算法思维(一)

从1到100求和学算法思维(二)

从1到100求和学算法思维(三)

从1到100求和学算法思维(四)

从1到100求和学算法思维(五)

从1到100求和学算法思维(六)

where2go 团队


微信号:算法与编程之美

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

本文分享自微信公众号 - 算法与编程之美(algo_coding)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVAandPython君

骚操作!用Python把公众号文章打包成pdf文件,不再怕自己的劳动成果被丢失

做自媒体的人,尤其是做了一年甚至更久的自媒体人,尤其是通过自媒体还有一些小收入的人,他们最怕自己的公众号内容因为各种原因而丢失,那就太可怕了! 在做自媒体内容上...

11830
来自专栏浩Coding

运行jar命令提示:没有主清单属性或者找不到或无法加载主类

文章如题:在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性。这是怎么回事?

19010
来自专栏安卓开发干货分享

Maven 虐我千千遍,我待 Maven 如初恋!

在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案...

10830
来自专栏大话swift

iOS 模版引擎加速web预览

在iOS开发中大家对于有些功能和模块不可避免的需要使用HTML来加速开发和实现功能的快速变更,例如:预览和活动页面。 基于需求的不断变更大家很多采用的H5来做,...

7320
来自专栏千里行走

ffmpeg-1:linux下音视屏处理工具ffmpeg部署

ffmpeg主要用于音视频转码,以及增删水印等处理,是一款简单实用且强大的音视频处理工具。

12730
来自专栏达达前端

(23)打鸡儿教你Vue.js

Webpack 目前无论在求职还是工作中,使用越来越普及。而想要学懂,学会Webpack更绝非易事。

9030
来自专栏爱编码

react-loadable懒加载

React Loadable是一个小型库,它使以组件为中心的代码分割变得非常容易。

10410
来自专栏分母为零

Docker 入门

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,诞生于2013年初。基于 Linux 内核的 cgroup,namespace,以及 A...

18540
来自专栏达达前端

(17)打鸡儿教你Vue.js

router.start(App, '#app') 表示router会创建一个App实例

6530
来自专栏国产程序员

GO(一)简介

Go 语言的基础组成有以下几个部分:包声明、引入包、函数、变量、语句 & 表达式、注释

9640

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励