Linux下启动jar包,这是一个非常基础的技能。但是涉及的环节也比较多,也容易出错。一路踩坑过来,jar包无法正确启动,原因主要是集中在三个方面:
1.Java环境问题
如何解决已经在上一篇文章里写的很详细了。
2.代码配置问题
3.Linux权限问题
主要是谈谈第二点和第三点怎么解决
对于代码配置问题,首先要认识到开发环境和正式环境是有区别的,开发环境一般是windows或者MAC,服务器一般都是Linux。开发环境还有开发工具,一个jar包能在开发工具里启动正常,不一定脱离了开发工具就能启动。所以一个程序写好了,不要想当然的觉得扔到服务器上也能正常运行。
在springboot中首先就要配置好Spring Boot Maven plugin,这样你才能打成一个正常的jar包。不会抛出no main manifest attribute, in xxxx-0.0.1-SNAPSHOT.jar这样的异常。
在pom.xml中配置,代码如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
还有,SpringBoot工程一般是作为一个可独立运行的项目,不是作为某个项目的依赖,如果要将一个Springboot项目作为另外一个项目的依赖,需要另外配置,在此不叙述。
设置好maven插件之后,一般就可以正常启动项目。但是如果是使用nohup命令,还有可能遇到这种情况:
看起来好像项目已经启动了,还返回了PID,实际上报了一个ignoring input and appending output to 'nohup.out'的错误,这种情况下去查看这个项目的进程会发现实际上是没有的,也就是说这个项目并没有正常启动。
出现这种情况的原因是对nohup.out日志没有写入权限,因为你执行nphup命令就会产生日志,日志默认就输出到nohup.out。而实际上给nohup.out赋权限也没解决的了。经过查找资料,最好的解决办法就是让输出的日志输出到一个有权限的地方,即不要简简单单的执行nohup xxx,而是 nohup xxx>/dev/null 2>&1 去执行,xxx就是你需要执行的脚本,样例如下:
nohup java -jar chapter063-0.0.1-SNAPSHOT.jar>/dev/null 2>&1 --server.port=8080 &
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以上就是我需要执行的脚本
以上三个问题就是最近在服务器启动jar包遇到的问题整理以及解决办法。
执行启动命令:
再查看进程:
完美。