百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2025-02-07 16:36 6 浏览

离线或者内网环境开发与外网不通,中央仓库连不上,使用 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 文件,修改以下几处。





true



  
    local-repo
    *
    central
    file://D:/maven/demo_repo
  

修改 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

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

相关推荐

【Docker 新手入门指南】第十章:Dockerfile

Dockerfile是Docker镜像构建的核心配置文件,通过预定义的指令集实现镜像的自动化构建。以下从核心概念、指令详解、最佳实践三方面展开说明,帮助你系统掌握Dockerfile的使用逻...

Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译

前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...

python虚拟环境迁移(python虚拟环境conda)

主机A的虚拟环境向主机B迁移。前提条件:主机A和主机B已经安装了virtualenv1.主机A操作如下虚拟环境目录:venv进入虚拟环境:sourcevenv/bin/active(1)记录虚拟环...

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

基于网络安全的Docker逃逸(docker)

如何判断当前机器是否为Docker容器环境Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)搭配学习教程1.检查根目录下是否存在.dockerenv文...

Python编程语言被纳入浙江高考,小学生都开始学了

今年9月份开始的新学期,浙江省三到九年级信息技术课将同步替换新教材。其中,新初二将新增Python编程课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材...

CentOS 7下安装Python 3.10的完整过程

1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...

如何在Ubuntu 20.04上部署Odoo 14

Odoo是世界上最受欢迎的多合一商务软件。它提供了一系列业务应用程序,包括CRM,网站,电子商务,计费,会计,制造,仓库,项目管理,库存等等,所有这些都无缝集成在一起。Odoo可以通过几种不同的方式进...

Ubuntu 系统安装 PyTorch 全流程指南

当前环境:Ubuntu22.04,显卡为GeForceRTX3080Ti1、下载显卡驱动驱动网站:https://www.nvidia.com/en-us/drivers/根据自己的显卡型号和...

spark+python环境搭建(python 环境搭建)

最近项目需要用到spark大数据相关技术,周末有空spark环境搭起来...目标spark,python运行环境部署在linux服务器个人通过vscode开发通过远程python解释器执行代码准备...

centos7.9安装最新python-3.11.1(centos安装python环境)

centos7.9安装最新python-3.11.1centos7.9默认安装的是python-2.7.5版本,安全扫描时会有很多漏洞,比如:Python命令注入漏洞(CVE-2015-2010...

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像http://npm.taobao.or...

centos7上安装python3(centos7安装python3.7.2一键脚本)

centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖yum-ygroupinstall"Developmenttools"...

利用本地数据通过微调方式训练 本地DeepSeek-R1 蒸馏模型

网络上相应的教程基本都基于LLaMA-Factory进行,本文章主要顺着相应的教程一步步实现大模型的微调和训练。训练环境:可自行定义,mac、linux或者window之类的均可以,本文以ma...

【法器篇】天啦噜,库崩了没备份(天啦噜是什么意思?)

背景数据库没有做备份,一天突然由于断电或其他原因导致无法启动了,且设置了innodb_force_recovery=6都无法启动,里面的数据怎么才能恢复出来?本例采用解析建表语句+表空间传输的方式进行...