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

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

ztj100 2025-01-08 18:46 25 浏览 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

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

相关推荐

再说圆的面积-蒙特卡洛(蒙特卡洛方法求圆周率的matlab程序)

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积,本文使用蒙特卡洛方法求解圆面积。...

python编程:如何使用python代码绘制出哪些常见的机器学习图像?

专栏推荐...

python创建分类器小结(pytorch分类数据集创建)

简介:分类是指利用数据的特性将其分成若干类型的过程。监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类。...

matplotlib——绘制散点图(matplotlib散点图颜色和图例)

绘制散点图不同条件(维度)之间的内在关联关系观察数据的离散聚合程度...

python实现实时绘制数据(python如何绘制)

方法一importmatplotlib.pyplotaspltimportnumpyasnpimporttimefrommathimport*plt.ion()#...

简单学Python——matplotlib库3——绘制散点图

前面我们学习了用matplotlib绘制折线图,今天我们学习绘制散点图。其实简单的散点图与折线图的语法基本相同,只是作图函数由plot()变成了scatter()。下面就绘制一个散点图:import...

数据分析-相关性分析可视化(相关性分析数据处理)

前面介绍了相关性分析的原理、流程和常用的皮尔逊相关系数和斯皮尔曼相关系数,具体可以参考...

免费Python机器学习课程一:线性回归算法

学习线性回归的概念并从头开始在python中开发完整的线性回归算法最基本的机器学习算法必须是具有单个变量的线性回归算法。如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要。但是...

用Python进行机器学习(2)之逻辑回归

前面介绍了线性回归,本次介绍的是逻辑回归。逻辑回归虽然名字里面带有“回归”两个字,但是它是一种分类算法,通常用于解决二分类问题,比如某个邮件是否是广告邮件,比如某个评价是否为正向的评价。逻辑回归也可以...

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂

一、拟合和回归的区别拟合...

推荐2个十分好用的pandas数据探索分析神器

作者:俊欣来源:关于数据分析与可视化...

向量数据库:解锁大模型记忆的关键!选型指南+实战案例全解析

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

用Python进行机器学习(11)-主成分分析PCA

我们在机器学习中有时候需要处理很多个参数,但是这些参数有时候彼此之间是有着各种关系的,这个时候我们就会想:是否可以找到一种方式来降低参数的个数呢?这就是今天我们要介绍的主成分分析,英文是Princip...

神经网络基础深度解析:从感知机到反向传播

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

Python实现基于机器学习的RFM模型

CDA数据分析师出品作者:CDALevelⅠ持证人岗位:数据分析师行业:大数据...

取消回复欢迎 发表评论: