Shell脚本系列(二): Maven私服的“一键搬运工”, 告别重复deploy!

各位Javaer,请回忆一下,你是否经历过这样的绝望:

mvn deploy:deploy-file -DgroupId=... -DartifactId=... -Dversion=... -Dpackaging=... -Dfile=... -Durl=... -DrepositoryId=...

当需要将一个、十个、甚至上百个本地JAR包上传到公司新搭建的Maven私服(Nexus/Artifactory)时,一遍又一遍地复制、粘贴、修改这条长得令人发指的命令,是不是感觉自己的灵魂都在被抽空?

今天,我们要终结这种“机械劳动”!向你隆重介绍 deploy_local_jars.sh —— Maven私服的“一键搬运工”!

哪些场景下,它能救你一命?

  • 首次搭建私有仓库:公司刚启用Nexus,需要将历史项目积累的大量第三方、非公开的JAR包快速填充进去。用它,一键搞定!
  • 项目迁移整合:一个非Maven的老项目要改造,它依赖的一堆本地JAR包需要统一上传到私服进行规范管理。用它,轻松迁移!
  • 离线环境部署:在与外网隔离的内网开发,需要先把外部下载好的所有依赖,一次性批量部署到内部私服供团队使用。用它,完美解决!
  • 仓库数据恢复:极端情况下私服数据损坏,但某位同事的本地 .m2 仓库缓存最全,可以用此脚本从本地“反向同步”,快速恢复数据。

脚本源码 deploy_local_jars.sh

这个脚本能自动扫描指定目录,解析 pom.xml,智能地将所有JAR包、POM文件(甚至 sources.jar, javadoc.jar)批量上传到你的私服。

#!/bin/bash

# ==============================================================================
# 脚本功能: 遍历本地 Maven 仓库的指定目录,解析 pom.xml 文件,
#           并将对应的 jar/pom 文件部署到私有 Maven 仓库。
#
# 版本: 2.0
# ==============================================================================

# --- 请修改以下配置 ---

# 你的私有仓库的 URL (releases 或 snapshots)
REPO_URL="https://xxx.xxx.com/repository/third-party/"

# 你的私有仓库在 settings.xml 中配置的 <server> ID
REPO_ID="third-party-releases"

# 要扫描的本地 Maven 仓库目录
# 例如: /home/zml/maven/repository/com/bocsoft/berc
SOURCE_DIR="/home/zml/maven/repository/com/kjhxtc"

# --- 配置结束 ---

# ... [脚本中段内容已在您的问题中提供,此处省略] ...

# 3. 查找所有的 pom 文件并遍历
find "$SOURCE_DIR" -name "*.pom" | while read -r pom_file; do
  
  # ... [处理逻辑] ...
  
done

echo ""
echo "========================================================================"
echo "脚本执行完毕。"
```*(注:为保持篇幅,此处省略了脚本的中间部分,您可以从文末获取完整代码)*

#### 如何召唤这位“搬运工”?

与上一个脚本不同,这个脚本在使用前,需要你**简单配置3个地方**。

**第一步:检查环境**
1.  确保你安装了 `maven` (`mvn` 命令可用)。
2.  确保你安装了 `xmllint`。
    *   Ubuntu/Debian: `sudo apt-get install libxml2-utils`
    *   CentOS/RHEL: `sudo yum install libxml2`
3.  确保你的 `~/.m2/settings.xml` 中已配置好私服的认证信息(`<server>` 标签),脚本中的 `REPO_ID` 必须和 `<server>` 的 `<id>` 完全一致。

**第二步:修改脚本配置**
将完整代码保存为 `deploy_local_jars.sh`,然后打开它,找到顶部的配置区,**修改以下三个变量**:

```bash
# --- 请修改以下配置 ---

# 【修改这里】=> 你的私有仓库的上传地址
# 例如:https://nexus.mycompany.com/repository/my-releases/
REPO_URL="https://xxx.xxx.com/repository/third-party/"

# 【修改这里】=> 你在 settings.xml 中配置的 <server> ID
# 例如:my-nexus-releases
REPO_ID="third-party-releases"

# 【修改这里】=> 你想扫描的本地 Maven 仓库路径
# 例如:/home/user/.m2/repository/com/aliyun
SOURCE_DIR="/home/zml/maven/repository/com/kjhxtc"

# --- 配置结束 ---

第三步:执行!

  1. 给予执行权限:
    chmod +x deploy_local_jars.sh
    
  2. 运行脚本:
    ./deploy_local_jars.sh
    ```现在,去泡杯咖啡吧!脚本会自动完成剩下的一切,你将在终端看到一个个依赖被成功上传的日志。
    
    

### 总结

deploy_local_jars.sh 是一个典型的“一次配置,终身受益”的效率工具。它将你从Maven私服初始化的繁重体力活中彻底解放出来,让你能更专注于核心的开发工作。

如果你觉得这个脚本有用,别忘了点个赞,并分享给还在手动 deploy 的同事们!

源码地址: https://github.com/zhengmingliang/code-fragment/tree/main/shell/linux/maven

Q.E.D.


寻门而入,破门而出