一、部署Jar包的方式
- 直接 java -jar xxx.jar
这种方式会将程序的输出打印在窗口中,一旦接收到 ctrl + c 指令就结束程序,程序不会在后台执行。 - 使用 java -jar xxx.jar &
这种方式会使程序在后台进行,和第一种方式的区别是,程序在接收到 ctrl + c 后程序进入后台继续执行,但是输出不会打印在窗口中。 - nohup 与 & 结合使用
nohup用于不挂断地运行命令,一般与 & 一起使用。第三种与第二种的区别是,第二种启动方式一旦当前终端关闭,程序也会关闭。而第三种在终端关闭后仍会自动执行,且遇到ctrl + c 也会结束程序。
- 其他命令
① jobs :查看当前终端后台执行的任务,换了终端就看不见了
② ps:查看后台执行的任务,不局限于某一个终端。
③ fg :将后台进程调制前台运行
④ crtl + z:将程序转入后台,同时程序进入暂停状态
⑤ bg :指定后台程序,将后台暂停的程序变成继续执行状态
⑥ kill:杀死进程
jobs #假设含有jobnum为1的任务
ps -aux|grep java #ps用法,java可改为不带后缀jar包名以更精确匹配
fg 1 #后面数字为程序对应的jobnum,需先用jobs查出
bg 1 #后面数字为程序对应的jobnum,需先用jobs查出
kill -9 12345 #12345为假定进程id
二、踩坑记录
org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
at org.springframework.util.Assert.notEmpty(Assert.java:464)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:173)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:116)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:396)
解决方法:在pom.xml中加入以下内容。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
加入此依赖后,在控制台执行 mvn clean install -Dmaven.test.skip 。
产生的jar包在targer目录下。
- 提示:No main manifest attribute, in XXX.jar
正常情况下,java打包成jar包需要在MANIFEST.MF中指定Main-Class项以便运行java -jar XXX.jar时找到对应的主类。因为-jar的含义就是后面跟的jar包是有main class可独立运行,所以需要在打包成jar包时指定这个类。
如果想运行时指定想要运行的类,此时应该用 -cp 来指定,比如:java -cp XXX.jar 全限定类名
参考资料:
https://www.jb51.net/article/169783.htm
https://www.cnblogs.com/qingmuchuanqi48/p/11723541.html