Windows下编写的Java程序(jar文件)在Linux服务器上运行的一系列问题

将Windows下编写的Java程序(jar文件)部署到Linux服务器上:

  1. 首先要保证在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里的包
    Windows下编写的Java程序(jar文件)在Linux服务器上运行的一系列问题_第1张图片
    MANIFEST.MF里改为:

    Manifest-Version: 1.0
    Main-Class: com.Main (主方法类路径)
    Class-Path: com.mysql.jdbc.Driver    (以mysql为例,写上依赖类)
    

    之后运行方法一的命令,生成的jar文件成功运行。

  2. 确认自己的程序有没有GUI部分
    我跑的qq服务器,写了GUI,以为在Linux上运行的时候它不显示界面就是了,但是没想到报出了这样的错误:

    No X11 DISPLAY variable was set......
    

    于是我把关于GUI的代码都删了,又打包一遍。

  3. 关于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:用户级的源码目录。

    原文链接

  4. MySQL导入sql脚本
    mysql> create database dbtest;
    mysql> use dbtest;
    mysql> source /opt/dbtest.sql;

  5. 确保jdk安装正确,环境变量已配置

  6. 开启相应端口,配置安全组
    我把防火墙关了

  7. 运行jar文件
    java -jar xxx.jar 程序在前台运行,ssh窗口会卡住
    java -jar xxx.jar & 程序在后台运行,ssh窗口不会卡住,断开ssh连接中止程序
    nohup java -jar xxx.jar & 程序在后台运行,ssh窗口不会卡住,断开ssh连接不会中止程序

  8. 其余命令
    jobs 查询后台程序
    fg 1 将1号程序调到前台
    ps -ef|grep xxx 查询xxx程序的进程
    kill 11111杀掉11111号进程

你可能感兴趣的:(Linux)