diff --git a/.cursor/rules/Chinese.mdc b/.cursor/rules/Chinese.mdc new file mode 100644 index 0000000..b2a078f --- /dev/null +++ b/.cursor/rules/Chinese.mdc @@ -0,0 +1,6 @@ +--- +alwaysApply: true +--- + +Please execute the generate commit message command in Chinese. +生成 Git 提交信息(Commit Message)时,必须强制使用中文。 diff --git a/README.md b/README.md index b2efac3..061e719 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,62 @@ 基于 Redis 的双向剪切板同步:主机将本地剪切板广播到从机,从机将本地剪切板上传到主机并按从机 ID 追加写入 TXT 文件。 -## 构建 +## 目录结构 -```bash -mvn clean package +``` +RedisClipSync/ + code/ # 代码与构建 + pom.xml + src/main/java/ + target/ # 打包输出 redis-clip-sync.jar + windows/ # Windows 脚本 + build-and-run.bat # 一键打包并运行 + run.bat # 仅运行(需已打包) + linux/ # Linux 脚本 + build-and-run.sh # 一键打包并运行 + run.sh # 仅运行(需已打包) + config.master.properties.example + config.slave.properties.example + config.properties # 运行前从 example 复制并修改 + README.md + 剪切板同步.md ``` -在 `target/` 下生成 `redis-clip-sync.jar`(已包含 Jedis 依赖,可直接运行)。 +## 构建与运行 -## 运行 +### 一键脚本(推荐) -确保工作目录包含 `config.properties`,或通过参数/系统属性指定配置路径: +脚本会从各自目录自动切换到项目根目录再执行,配置与 `clipboard_logs/` 均在根目录。 + +**Windows**(在项目根目录或 `windows/` 下执行均可) +- **windows/build-and-run.bat**:先打包再启动。 + 双击运行,或:`windows\build-and-run.bat [配置文件路径]`(默认 `config.properties`)。 +- **windows/run.bat**:不重新打包,直接运行。 + 用法:`windows\run.bat [配置文件路径]`。 + +**Linux**(需先赋予执行权限:`chmod +x linux/*.sh`) +- **linux/build-and-run.sh**:先打包再启动。 + `./linux/build-and-run.sh [配置文件路径]`(默认 `config.properties`)。 +- **linux/run.sh**:不重新打包,直接运行。 + 用法:`./linux/run.sh [配置文件路径]`。 + +运行前请将 `config.master.properties.example` 或 `config.slave.properties.example` 复制为 `config.properties` 并修改。 + +### 手动构建与运行 + +在项目根目录执行: ```bash -java -jar target/redis-clip-sync.jar -# 或指定配置 -java -jar target/redis-clip-sync.jar /path/to/config.properties -java -Dconfig=/path/to/config.properties -jar target/redis-clip-sync.jar +mvn -f code/pom.xml clean package +``` + +在 `code/target/` 下生成 `redis-clip-sync.jar`(已包含 Jedis 依赖)。 + +确保工作目录为项目根目录并包含 `config.properties`,或通过参数指定配置路径: + +```bash +java -jar code/target/redis-clip-sync.jar +java -jar code/target/redis-clip-sync.jar /path/to/config.properties ``` ## 配置 @@ -50,15 +89,14 @@ slave.id=192.168.1.50 `slave.id` 决定主机端生成的文件名(如 `192.168.1.50.txt`)。 -## 目录结构 +## 运行目录说明 -主机启动后会自动创建保存目录: +主机启动后会在配置的 `master.save.dir`(默认 `./clipboard_logs/`)下自动创建保存目录。建议在项目根目录运行脚本,这样 `config.properties` 与 `clipboard_logs/` 均在根目录下: ``` -/ - - redis-clip-sync.jar +RedisClipSync/ - config.properties - - clipboard_logs/ # 自动创建 + - clipboard_logs/ # 自动创建(Master) - 192.168.1.50.txt # 从机 A 的记录 - 192.168.1.51.txt # 从机 B 的记录 ``` diff --git a/pom.xml b/code/pom.xml similarity index 65% rename from pom.xml rename to code/pom.xml index e694a9a..86a660b 100644 --- a/pom.xml +++ b/code/pom.xml @@ -43,18 +43,27 @@ org.apache.maven.plugins maven-assembly-plugin 3.6.0 - - - - RedisClipSync - - - - jar-with-dependencies - - redis-clip-sync - false - + + + make-assembly + package + + single + + + + + RedisClipSync + + + + jar-with-dependencies + + redis-clip-sync + false + + + diff --git a/src/main/java/RedisClipSync.java b/code/src/main/java/RedisClipSync.java similarity index 100% rename from src/main/java/RedisClipSync.java rename to code/src/main/java/RedisClipSync.java diff --git a/linux/build-and-run.sh b/linux/build-and-run.sh new file mode 100644 index 0000000..bafb450 --- /dev/null +++ b/linux/build-and-run.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +cd "$PROJECT_ROOT" + +echo "========================================" +echo " Redis 剪切板同步 - 一键打包并运行" +echo "========================================" +echo + +echo "[1/2] 正在打包..." +if ! mvn -f code/pom.xml -q clean package -DskipTests; then + echo "打包失败,请确保已安装 Maven 且可执行 mvn。" + exit 1 +fi +echo "打包完成: code/target/redis-clip-sync.jar" +echo + +CONFIG="${1:-config.properties}" +echo "[2/2] 正在启动(配置文件: $CONFIG)..." +echo "提示: 按 Ctrl+C 可退出程序" +echo +exec java -jar code/target/redis-clip-sync.jar "$CONFIG" diff --git a/linux/run.sh b/linux/run.sh new file mode 100644 index 0000000..99fe429 --- /dev/null +++ b/linux/run.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +cd "$PROJECT_ROOT" + +CONFIG="${1:-config.properties}" + +if [[ ! -f code/target/redis-clip-sync.jar ]]; then + echo "未找到 code/target/redis-clip-sync.jar,请先运行 linux/build-and-run.sh 进行打包。" + exit 1 +fi + +echo "启动 Redis 剪切板同步(配置: $CONFIG)..." +exec java -jar code/target/redis-clip-sync.jar "$CONFIG" diff --git a/windows/build-and-run.bat b/windows/build-and-run.bat new file mode 100644 index 0000000..daf71a2 --- /dev/null +++ b/windows/build-and-run.bat @@ -0,0 +1,33 @@ +@echo off +chcp 65001 >nul +setlocal + +:: 切换到项目根目录(脚本在 windows\ 下) +cd /d "%~dp0.." + +echo ======================================== +echo Redis 剪切板同步 - 一键打包并运行 +echo ======================================== +echo. + +:: 1. 打包 +echo [1/2] 正在打包... +call mvn -f code\pom.xml -q clean package -DskipTests +if errorlevel 1 ( + echo 打包失败,请确保已安装 Maven 且可执行 mvn。 + pause + exit /b 1 +) +echo 打包完成: code\target\redis-clip-sync.jar +echo. + +:: 2. 运行(配置文件可选,默认 config.properties) +set CONFIG=config.properties +if not "%~1"=="" set CONFIG=%~1 + +echo [2/2] 正在启动(配置文件: %CONFIG%)... +echo 提示: 按 Ctrl+C 可退出程序 +echo. +java -jar code\target\redis-clip-sync.jar %CONFIG% + +pause diff --git a/windows/run.bat b/windows/run.bat new file mode 100644 index 0000000..ddc33ff --- /dev/null +++ b/windows/run.bat @@ -0,0 +1,18 @@ +@echo off +chcp 65001 >nul + +:: 切换到项目根目录(脚本在 windows\ 下) +cd /d "%~dp0.." + +set CONFIG=config.properties +if not "%~1"=="" set CONFIG=%~1 + +if not exist "code\target\redis-clip-sync.jar" ( + echo 未找到 code\target\redis-clip-sync.jar,请先运行 windows\build-and-run.bat 进行打包。 + pause + exit /b 1 +) + +echo 启动 Redis 剪切板同步(配置: %CONFIG%)... +java -jar code\target\redis-clip-sync.jar %CONFIG% +pause