Java:idea打包jar包&部署到服务器过程全记录

关于idea打包Spring boot为可执行jar包,并部署到服务器分为以下步骤:

  1. idea打包jar包
  2. tmux开会话
  3. 连接远程服务器
  4. 上传文件
  5. 成功运行

1. idea打包jar包

我尝试了两种方式:分别是用idea自带的打包形式,和maven管理工具打包。

####1.1. 用idea自带的打包形式

可能存在的问题

  • JAR包运行错误:“Error :Invalid or corrupt jarfile xxx.jar”。(已解决Q1)

  • 有些项目依赖没有打进jar包,在项目目录下可以运行,但单独jar包不能运行。(未解决Q2)

主菜单栏File -> Project Structure -> Artifacts -> +(Add) -> JAR -> From modules with dependencies… -> 选择Main Class -> 选择copy to the output… -> 选择META-INF生成目录(注意放在项目目录下,不要放在默认目录,解决Q1) -> OK -> (尝试了创建libs目录,放第三方jar包,依然没有解决Q2) -> OK -> 主菜单栏Build -> Build Artifacts… -> build生成jar包。

1

最终结果:在该目录下java -jar xxx.jar可以运行,单独放在服务器报错。

2

####1.2. 用自带的maven管理工具打包

于是尝试第二种方法。作为一个spring boot项目,用idea自带的maven管理工具进行打包。步骤如下图所示,依次点击clean、compile、package和install。

3

获得如下图文件夹。此刻的jar包可以独立运行,没有依赖缺失的问题。

4

2. tmux开会话

命令介绍:Tmux (Terminal Multiplexer)是一款终端复用软件,使用它的好处一是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机,二是当终端关闭后该shell里面运行的任务进程也会随之中断,通过使用tmux就能很容易的解决这个问题。

用tmux开一个会话,防止断开服务器连接后应用停止运行。如下为步骤及常见操作,均在命令行操作:

  • 在mac中安装tmux
1
bre install tmux
  • 修改快捷键前缀(此处没用)

当想要使用tmux快捷键时,需要先按下快捷键前缀,然后再按下快捷键。由于键盘上Ctrl-b太远,所以修改为Ctrl-a。

将以下配置加入到tmux的配置文件~/.tmux.conf中(没有就创建一个)

1
2
unbind C-b
set -g prefix C-a
  • 创建新的会话
1
tmux new -s <name-of-my-session>
  • 获取会话列表
1
tmux ls
  • 在会话外进入会话
1
2
3
tmux attach -t <name-of-my-session>
#or
tmux a -t <name-of-my-session>

可能会产生报错:

1
sessions should be nested with care, unset $TMUX to force

解决办法:

1
unset TMUX

然后再执行tmux attach。

  • 回到之前的会话
1
tmux attach
  • 临时退出但不删除会话

Ctrl+a,然后d(注意先后顺序,并非同时按下)

  • 退出并删除会话

Ctrl+a,然后x

3. 连接远程服务器

前提:有需要连接的服务器的ip、账户、密码。

  • 打开终端,进入根目录
1
sudo su -
  • 连接服务器(输入用户名和地址)
1
ssh server-username@remote-ip
  • 如果第一次连接需要输入yes或者no确认是否连接,输入yes回车。

  • 输入密码

  • 连接成功

  • 进行操作

假如要部署,首先应该查看端口占用情况:

1
2
3
4
#查看服务器所有端口
netstat -ntlp
#查看服务器指定端口是否被占用
lsof -i:8080
  • 退出服务器
1
exit

4. 上传文件

我采用的SCP方式传输文件。

  • 上传文件
1
2
scp local-file-url server-username@remote-ip:remote-file-url
#上传文件夹加-r参数
  • 下载文件
1
scp -r server-username@remote-ip:remote-file-url local-file-url

另外mac平台下可以使用sz和rz命令进行远程服务器文件的上传下载,似乎需要本机和服务器都安装lrzsz。

5. 成功运行

配置合适的端口,jar包上传到服务器之后,就可以执行啦。

1
java -jar xxxxx.jar

成功执行之后,Ctrl+a|d临时退出会话,就可以一直挂着任务进程了。