百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Maven内网开发与离线仓库导入

ztj100 2025-01-08 18:46 36 浏览 0 评论

离线或者内网环境开发与外网不通,中央仓库连不上,使用 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

文章对您有帮助的话,记得 点赞 关注 收藏 哦~

相关推荐

其实TensorFlow真的很水无非就这30篇熬夜练

好的!以下是TensorFlow需要掌握的核心内容,用列表形式呈现,简洁清晰(含表情符号,<300字):1.基础概念与环境TensorFlow架构(计算图、会话->EagerE...

交叉验证和超参数调整:如何优化你的机器学习模型

准确预测Fitbit的睡眠得分在本文的前两部分中,我获取了Fitbit的睡眠数据并对其进行预处理,将这些数据分为训练集、验证集和测试集,除此之外,我还训练了三种不同的机器学习模型并比较了它们的性能。在...

机器学习交叉验证全指南:原理、类型与实战技巧

机器学习模型常常需要大量数据,但它们如何与实时新数据协同工作也同样关键。交叉验证是一种通过将数据集分成若干部分、在部分数据上训练模型、在其余数据上测试模型的方法,用来检验模型的表现。这有助于发现过拟合...

深度学习中的类别激活热图可视化

作者:ValentinaAlto编译:ronghuaiyang导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性...

超强,必会的机器学习评估指标

大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。选择正确的验证指...

机器学习入门教程-第六课:监督学习与非监督学习

1.回顾与引入上节课我们谈到了机器学习的一些实战技巧,比如如何处理数据、选择模型以及调整参数。今天,我们将更深入地探讨机器学习的两大类:监督学习和非监督学习。2.监督学习监督学习就像是有老师的教学...

Python教程(三十八):机器学习基础

...

Python 模型部署不用愁!容器化实战,5 分钟搞定环境配置

你是不是也遇到过这种糟心事:花了好几天训练出的Python模型,在自己电脑上跑得顺顺当当,一放到服务器就各种报错。要么是Python版本不对,要么是依赖库冲突,折腾半天还是用不了。别再喊“我...

超全面讲透一个算法模型,高斯核!!

...

神经网络与传统统计方法的简单对比

传统的统计方法如...

AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

...

自回归滞后模型进行多变量时间序列预测

下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。假设要预测其中一个变量。比如,sparklingwine。如何建立一个模型来进行预测呢?一种常见的方...

苹果AI策略:慢哲学——科技行业的“长期主义”试金石

苹果AI策略的深度原创分析,结合技术伦理、商业逻辑与行业博弈,揭示其“慢哲学”背后的战略智慧:一、反常之举:AI狂潮中的“逆行者”当科技巨头深陷AI军备竞赛,苹果的克制显得格格不入:功能延期:App...

时间序列预测全攻略,6大模型代码实操

如果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,欢迎移步宝藏公众号...

AI 基础知识从 0.4 到 0.5—— 计算机视觉之光 CNN

...

取消回复欢迎 发表评论: