最近又进步了。我一直习惯直接在Intellij Idea中直接运行写好的程序,不过也是因为仅仅是写个模拟接口而已。后来到新公司要负责java后台,开始习惯把项目部署到外部Tomcat去测试,或者打成war包让运维去linux上面部署。不过,想来这也是因为只是在做一个目前看起来并不是很重要的项目而已。如果同时做的项目多了,好像自己的做法就不好了。
老大最近点醒了我,原来SpringBoot是可以打包成jar包,而不依赖容器就可以运行的。我立即进行了研究和尝试,分别在win7和ubuntu上面进行了测试,终于达到效果。
一、首先,必须做好一个运行流畅没有毛病的项目。
二、修改pom文件的开头部分:
packaging本来就是jar,我的项目因为不明白这个作用被我改成war了。
三、在application.properties中加入server.port=9090,端口号自己要改一下,别和其他的冲突,建议有文案设置,给一个项目规定一个端口号。因为jar包部署之后是一个项目独占一个容器。调用的时候项目名被隐藏了。
四、在Idea下方的Terminal或者命令行定位到项目文件夹,运行:mvn clean package命令。
有资料说clean前面有个-,结果大半天我没弄出来。后来回家研究发现老提"lean"出错,于是我就写成mvn -cclean package运行,结果还成了。网上很多资料是没有-的。
前提是要另外安装maven。
提示一下,这里最容易出错:
1.网上很多资料在解释这里的问题的时候都去修改pom,加了很多什么东西。后来发现根本不需要,容易出现包不能下载的error,不仅如此,pom中有些提示出错的包还要删去。命令行后面加-e可以打印异常提示。
2.我在项目中写了单元测试,有三个方法,其中有一个方法运行会出错,平时用war部署发现不了问题,打jar包好像一个个都要运行一遍,结果我的一个单元测试方法出问题就不能打包成功,删除就好了。
可以看到jar包的位置在target文件夹下面。
五、部署
win7和linux是一样的。把jar包上传到linux,规划一个文件夹。将命令行定位到该文件夹下,运行命令(win7和linux一样):
java -jar yuedaoapi-1.0.0.jar
就这样,jar包就部署好了。试着调用一下,没有任何问题。
不过如果要在后台调用,需要运行:
java -jar yuedaoapi-1.0.0.jar > log_yuedaoapi.file 2>&1 &
这个方法在linux没有问题,在win7中没有成功。命令行窗口关闭服务就终止了。
如果要关掉后台运行的服务,释放被占用的端口。就要记住运行成功后给出的进程pid,比如上面图中的2637
用kill -9 2637就可以杀死。
如果不小心忘记了记录这个pid,可以用以下两种方式都可以找到进程,看到pid
netstat -ap|grep 9090
lsof -i:9090
这时候再kill就好了。
看一下调用效果:
看得出来效果不错,项目名称被隐藏了。我的Idea终于被解放了。