前言
在开发Flink程序的时候很多时候我们本地打包Jar在服务器中运行,比较麻烦。
我们就可以使用以下的方式来让远程服务器运行本地程序。
步骤
添加运行配置
按如下配置
下拉选择SSH
输入密码,一直下一步
其中JDK会自动获取位置,我们只需要修改程序的目标位置就行。
之后运行的时候,会自动把本地的依赖和代码上传至服务器端自动运行。
Rsync
默认上传的是使用的scp方式,比较慢,我们可以配置为rsync方式。
下载客户端
Windows客户端cwRsync
链接:https://pan.baidu.com/s/1RbPZ6RntpzF3dJ5HLKkRUQ
提取码:psvm
CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包。
设置环境变量
1 | Path=D:\Program Files (x86)\cwRsync\bin |
添加环境变量
1 | HOME=C:\Users\Administrator |
否则会报错
Could not create directory ‘/home/Administrator/.ssh’
配置使用rsync方式
但是并不能正常运行
IDEA中同步后无法运行类
在Windows环境同步到Linux环境中不能运行
IDEA自带的SSH+Rsync有BUG,不能使用,这里使用脚本来实现。
准备知识
编译
1 | mvn compile |
同步代码
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt ./target/classes/ zj@192.168.7.101::zjhome |
生成jar
1 | mvn dependency:copy-dependencies -DincludeScope=compile |
说明:
默认会将jar包放在项目中的target
下的dependency
目录下面
同步Jar
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt ./target/dependency/ zj@192.168.7.101::zjhome |
运行
服务器上在同步的文件夹内
1 | java -cp a.jar:b.jar cn.psvmc.WordCount |
或者本地运行
1 | ssh root@192.168.7.101 "cd /root/zjhome/&&java -cp a.jar:b.jar cn.psvmc.WordCount" |
注意
所有jar包之间要拼接,不能使用通配符
*
。
脚本
先运行以下命令生成jar
1 | mvn dependency:copy-dependencies -DincludeScope=compile |
同步Jar
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt ./target/dependency/ zj@192.168.7.101::zjhome |
把脚本文件放到项目的根目录
syncrun.bat
1 | @echo off |
本地添加运行脚本选择上面的脚本文件
添加免密登录
Windows中运行
1 | ssh-keygen -t rsa |
把本地用户目录.ssh
下的id_rsa.pub
中的内容追加到服务器用户目录.ssh
下的authorized_keys
的内容后面。
比如我本地路径为
1 | C:\Users\Administrator\.ssh |
如果报错:
password file must be owned by root when running as root
进入安装目录下D:\Program Files (x86)\cwRsync\bin
1 | chmod -c 600 /cygdrive/d/auth.txt |