网站首页 > 博客文章 正文
离线或者内网环境开发与外网不通,中央仓库连不上,使用 Maven 管理项目会遇到很多问题。比如:依赖包缺失,内网的Nexus私服版本老旧,很久没有维护,项目无法运行打包,第三方非公开的私人 Jar 包引入麻烦。
本文面向这些问题,提出两个解决办法。
0.解决方法
- 把项目弄外网,打包好再传入;[伤心]
- 使用本地离线仓库,离线打包,离线使用;[心]
- 先把离线仓库上传到内网Nexus私服,再下载使用;[心]
项目弄外网当然简单粗暴,但都在内网开发了,保密肯定有要求,内网开发,协调下一般可以单向向内传文件的。后两方法还是可行些。
1.离线仓库
先说说离线仓库:首先,在外网电脑新建一个测试项目,把内网需要的 jar 包依赖坐标都写在 pom.xml 物料清单里,然后用 Maven 把 jar 包下载到本地仓库 demo_repo 目录。
注意1:
默认本地仓库(比如:D:/maven/repo)可能有历史项目曾用的 Jar 包,占用空间会非常大。如果是开荒内网啥包都没,可直接把这个本地历史 repo 仓库整个打包带走。还可以在 IDEA 的设置搜索Maven,重写本地仓库保存到新的路径(比如:D:/maven/demo_repo),这里面仅包含本项目用到的依赖包。
注意2:
把上一步下载好了,进入 demo_repo 本地仓库目录,直接搜索关键字:【_remote.repositories】【lastUpdate】。搜到的文件都删除掉,再使用Maven重新下载一次依赖包。有此关键字的文件是Maven下载过程中的日志标记残留文件,不然在内网Maven还是根据里面记录的远程仓库去下载,影响后续在内网打包。
最简单的方法,在本地仓库根目录搜索栏关键字:搜到的文件ctrl+A全选,再delete删除。命令方式删除:
C:\> d:
D:\> cd D:/maven/maven_repo
D:\maven\maven_repo> for /r %i in (_remote.repositories) do del %i
D:\maven\maven_repo> for /r %i in (lastUpdate) do del %i
demo_repo 压缩成 zip 包,传到内网后,解压在内网开发机的 Maven 仓库根路径下。
内网操作
进入 Maven 安装目录的 conf 目录,复制 settings.xml 并重命名为 settings-offline.xml。修改 settings-offline.xml 文件,修改以下几处。
<!-- 本地仓库路径,因为现使用离线方式,可以注释掉 -->
<!-- <localRepository>D:/maven/maven_repo</localRepository> -->
<!-- 1. 找到 offline,设置离线模式,设置成 true -->
<offline>true</offline>
<!-- 2. 找到镜像 mirrors,设置离线模式 Maven 的镜像为本地仓库 -->
<mirrors>
<mirror>
<id>local-repo</id>
<mirrorOf>*</mirrorOf>
<name>central</name>
<url>file://D:/maven/demo_repo</url>
</mirror>
</mirrors>
修改 Maven 的配置文件为 settings-offline.xml,重写本地仓库为 D:/maven/demo_repo,重启IDEA刷新,即可直接本机开发打包了。如果团队都有使用需求,局域网 zip 包传来传去也可以,麻烦点上面步骤每个人重复搞下。
2.上传到内网Nexus私服
团队使用安装个 Nexus 私服还是有必要的,下面就教你上传仓库,大家一起用。Nexus 私服搭建网络上有很多教程,这里就不啰嗦了。拥有 Nexus 管理员账号密码。在 Nexus 上新建一个仓库,比如:http://192.168.13.32:8081/repository/demo-releases/,如果已经有仓库了,直接用现成的仓库链接。
Nexus 支持在页面上传 jar 包,只能手动一个个上传,一两个还方便,整个离线仓库文件夹成千上万就够呛了。
把这个页面的单个上传请求接口挖到,就可以写个脚本遍历本地仓库上传,模拟批量上传。修改好下面脚本 batch_upload_repo.sh,然后把脚本扔到本地仓库根目录。
仓库和脚本相对位置如:
- D:\maven\demo_repo\com\oracle\ojdbc\ojdbc8\19.3.0.0
- D:\maven\demo_repo\batch_upload_repo.sh
上传前,最后检查下含有关键字【_remote.repositories】【lastUpdate】的文件,删干净再上传,不然传上去都是脏文件,开发时 Maven 下载会出现莫名其妙的问题。
如果本地开发机器上是Windows,可以使用 git-bash,把脚本在本地仓库根目录,直接执行此脚本上传。
本地开发机器没有 git-bash,可以把整个仓库打压缩包传到Nexus或任意内网服务器上,解压后执行此脚本上传。
# 替换 Nexus 账号和密码、仓库链接,demo-releases 就是内网 Nexus 上对应仓库目录
sh batch_upload_repo.sh -u yourusername -p yourpassword -r http://192.168.13.32:9096/repository/demo-releases/
上传完成后,本地配置好 setting.xml 连接该私服仓库,即可正常使用。
附:批量上传脚本
#!/bin/bash
# batch_upload_repo.sh,来源于网络
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mvnimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
END
文章对您有帮助的话,记得 点赞 关注 收藏 哦~
猜你喜欢
- 2024-10-27 Windows Server 2016 PHP运行环境安装配置
- 2024-10-27 SAP S4HANA 2022安装记录:3. SUSE设置及文件准备
- 2024-10-27 Windows 版本的 B站 开源了?(b站有windows客户端吗)
- 2024-10-27 监控工具之Zabbix,搭建过程和使用心得
- 2024-10-27 Git使用教程:最详细、最傻瓜、最浅显、真正手把手教
- 2024-10-27 向 IT 管理员提供有用的提示:使用 Windows WDS部署各种操作系统
- 2024-10-27 windows下安装php+nginx的运行环境,并把nginx单独注册为服务
- 2024-10-27 通用的windows系统服务注册方案(系统服务注册表)
- 2024-10-27 「苹果小程序」App Clips和微信小程序区别在哪?
- 2024-10-27 Kali与编程:centos8如何加入windows域
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)