将Windows下编写的Java程序(jar文件)部署到Linux服务器上:
-
首先要保证在Windows下的jar包能够运行。
有时候IDE生成的jar文件运行时会找不到诸如jdbc connector之类的依赖包,所以只好自己动手敲命令。
方法一
IDE都会生成class文件,找到这些文件的目录,在根目录下放入所要依赖的jar包,然后退到上一级目录(一般是IDE的输出目录),新建MANIFEST.MF
文件,内容如下: 括号不算Manifest-Version: 1.0 Main-Class: com.Main (主方法类路径) Class-Path: mysql-connector-java-8.0.13.jar (以mysql为例,写上依赖jar)
注意格式和空格
然后在此目录下运行cmd,输入命令:
jar cvfm 输出文件名.jar MANIFEST.MF -C 刚刚退出来的那个根目录/ .
之后会生成一个jar文件。但以上方法对我无效!无奈网上都是这么说的
方法二
把方法一的“在根目录下放入依赖包”改为在根目录下解压jar包里你需要的目录,如mysql的 com 目录,如下图:com是connector里的包
把MANIFEST.MF
里改为:Manifest-Version: 1.0 Main-Class: com.Main (主方法类路径) Class-Path: com.mysql.jdbc.Driver (以mysql为例,写上依赖类)
之后运行方法一的命令,生成的jar文件成功运行。
-
确认自己的程序有没有GUI部分
我跑的qq服务器,写了GUI,以为在Linux上运行的时候它不显示界面就是了,但是没想到报出了这样的错误:No X11 DISPLAY variable was set......
于是我把关于GUI的代码都删了,又打包一遍。
-
关于Linux目录
个人认为可以把程序拷贝到 /opt 下面
援引别人的解释:Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的
/usr
:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
/usr/local
:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到 这个目录下。
/opt
:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大 型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
/usr/src
:系统级的源码目录。
/usr/local/src
:用户级的源码目录。 -
MySQL导入sql脚本
mysql> create database dbtest;
mysql> use dbtest;
mysql> source /opt/dbtest.sql;
-
确保jdk安装正确,环境变量已配置
-
开启相应端口,配置安全组
我把防火墙关了 -
运行jar文件
java -jar xxx.jar
程序在前台运行,ssh窗口会卡住
java -jar xxx.jar &
程序在后台运行,ssh窗口不会卡住,断开ssh连接中止程序
nohup java -jar xxx.jar &
程序在后台运行,ssh窗口不会卡住,断开ssh连接不会中止程序 -
其余命令
jobs
查询后台程序
fg 1
将1号程序调到前台
ps -ef|grep xxx
查询xxx程序的进程
kill 11111
杀掉11111号进程