项目打包遇到的几个坑和小tip

昨天将springboot打包放到测试平台上面做测试的时候(将项目打成war包),发现这个项目放在tomcat中无法运行,而非常神奇的是,控制台上面居然也不报错。明明在开发环境下是可以启动的。。。
一开始怀疑是因为社区版的idea存在什么功能阉割,所以导致打包出来的war包不能用。沿着这个怀疑的方向,我给社区版的idea装springboot插件,结果发现社区版的idea不能安装SpringBoot生成插件。
再去网上找原因,查到说社区版的是用Spring Assistant插件来生成SpringBoot项目。
在这里插入图片描述安装了Spring Assistant插件以后发现打包出来的war包还是无法在tomcat中运行。
看来不是缺少插件的原因。又继续从网上查找资料。最后发现是因为springboot中内置的tomcat依赖与外部的tomcat容器冲突导致的,解决办法就是在pom文件中给tomcat依赖加上provided域。
在这里插入图片描述
这里要科普一个小知识,springboot可以打包成jar和war两种格式。因为war包需要放在tomcat容器中运行,所以我们要把springboot内置的tomcat在打包时排除掉(即加上provided域),而jar包是可以独立运行的,所以我们在打包时要将内置的tomcat也打进jar包里(即不加provided域)。
只是一个很小的小问题,但真的是被坑了好久啊。

在加几个关于打包和运行程序的小tip:

  1. mvn clean compile package指令打包的时候,maven默认会先将test包中的所有测试方法都执行一遍,这其实是不必要的,我们可以用mvn clean compile package -Ptest -Dmaven.test.skip=true指令来跳过测试这一步
  2. 如果项目是打包成jar包的话,.properties文件会被打包在包里面,这样修改配置文件会很麻烦,我们可以把properties复制一份放在jar包的同级目录下,之后要修改什么配置都可以直接修改外面的那个.properties文件,因为springboot优先是从同级目录下先读取配置文件的。
  3. 在Linux平台上,我们用java -jar xxx.jar指令启动springboot工程的话,程序是在前台运行的,此期间我们无法做其他事情,而且一旦关闭了ssh终端,程序也就关闭了。如果我们要想让程序在后台运行的话就要用指令nohup java -jar XXX.jar &nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。
  4. 当用 nohup 命令启动程序时,默认情况下该程序的所有屏幕输出都被重定向到nohup.out的文件中,除非另外指定了输出文件,要自己指定输出文件,需要在指令中加上>xxx.log。比如nohup java -jar XXX.jar >xxx.log &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值