服务器上运行
在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
先运行以下命令生成jar
1 | mvn dependency:copy-dependencies -DexcludeScope=provided |
同步Jar
1 | rsync -avzP --password-file=/cygdrive/d/auth.txt ./target/dependency/ zj@192.168.7.101::zjhome |
添加免密登录
Windows中运行
1 | cd C:\Windows\System32\OpenSSH |
把本地用户目录.ssh
下的id_rsa.pub
中的内容追加到服务器用户目录.ssh
下的authorized_keys
的内容后面。
比如我本地路径为
1 | C:\Users\Administrator\.ssh |
脚本
把脚本文件放到项目的根目录
syncrun.bat
1 | @echo off |
本地添加运行脚本选择上面的脚本文件
服务器上运行(新)
上面的方式出现一个问题,当我们的命令特别长的时候,会超出命令的长度,从而导致无法执行。
解决方式
本地把服务器上要执行的脚本拼接保存在文件中,上传文件后在服务器上执行。
代码示例
运行不更新Jar
syncRunNoJar.bat
1 | @echo off |
另外jar包是不经常变化的,所以把同步Jar也单独提出来了。
只更新Jar
syncJar.bat
1 | @echo off |
Rsync参数
rsync是一款常用的文件传输工具,它可以通过本地或远程连接,实现文件同步和备份。
以下是一些常见的rsync参数说明:
-a
:归档模式,表示以递归方式传输文件,并保持文件的属性(包括权限,时间戳等)。-v
:详细输出,显示传输的文件列表和详细过程。-r
:递归复制目录及其内容。-z
:压缩传输,使用压缩算法减少传输的数据量。-P
:显示传输进度,同时允许断点续传。-u
:仅传输源文件中新于目标文件的文件。--delete
:删除目标目录中源目录没有的文件。--exclude
:排除指定的文件或目录。--include
:仅传输指定的文件或目录。
这些参数可以根据具体需求进行组合使用,以实现所需的文件传输操作。
请注意,rsync的参数还有很多其他选项,可以通过运行rsync --help
命令查看完整的参数列表。