欢迎大家来到IT世界,在知识的湖畔探索吧!
离线或者内网环境开发与外网不通,中央仓库连不上,使用 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
欢迎大家来到IT世界,在知识的湖畔探索吧!
demo_repo 压缩成 zip 包,传到内网后,解压在内网开发机的 Maven 仓库根路径下。
内网操作
进入 Maven 安装目录的 conf 目录,复制 settings.xml 并重命名为 settings-offline.xml。修改 settings-offline.xml 文件,修改以下几处。
欢迎大家来到IT世界,在知识的湖畔探索吧!<!-- 本地仓库路径,因为现使用离线方式,可以注释掉 --> <!-- <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 连接该私服仓库,即可正常使用。
附:批量上传脚本
欢迎大家来到IT世界,在知识的湖畔探索吧!#!/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
文章对您有帮助的话,记得 点赞 关注 收藏 哦~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/97538.html