• Maven内网开发使用离线仓库


    Maven内网开发使用离线仓库

    离线或者内网环境开发与外网不通,中央仓库连不上,使用 Maven 管理项目会遇到很多问题。
    比如:依赖包缺失,内网的Nexus私服的包老旧,很久没有维护,项目无法运行打包,第三方非公开的私人 Jar 包引入麻烦。

    本文面向这几个问题,提出几个解决方法:

    解决方法:

    • 把项目弄外网,打包好再传入;(× 都内网开发了保密要求不行,不耍小聪明)
    • 使用本地离线仓库,离线打包;(√ )
    • 先上传到内网Nexus私服,再使用;(√ )

    具体操作:

    1.离线仓库:

    先说说离线仓库:
    首先,在外网新建一个测试项目,把需要的 jar 包依赖坐标都写在 pom.xml 物料清单里,然后把依赖下载到本地仓库。

    注意1:
    默认本地仓库(比如:D:/maven/maven_repo)可能有历史项目曾用的 Jar 包,占用空间会非常大。可以在 IDEA 的设置搜索Maven,重写本地仓库路径(比如:D:/maven/demo_repo),这里面仅包含本项目用到的 Jar 包。

    注意2
    把 demo_repo 压缩成 zip 包,搞到内网后,解压在仓库根路径下直接搜索关键字:_remote/ lastUpdate,搜到的文件都删除掉,不然在内网还是去找远程仓库下载,影响打包。

    最简单的方法,在本地仓库根目录搜索栏关键字删除:
    搜到的文件ctrl+A全选,再delete删除。
    命令方式:

    # 打开仓库地址,输入cmd 打开命令行,执行下面语句
    for /r %i in (_remote.repositories) do del %i
    for /r %i in (lastUpdate) do del %i
    
    • 1
    • 2
    • 3

    内网操作
    进入 Maven 的 conf 目录,复制 settings.xml 并重命名为 settings-offline.xml。修改 settings-offline.xml 文件,修改以下几处。

    
    
    
    
    <offline>trueoffline>
     
    
    <mirrors>
      <mirror>
        <id>local-repoid>
        <mirrorOf>*mirrorOf>
        <name>centralname>
        <url>file://D:/maven/demo_repourl>
      mirror>
    mirrors>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    修改 Maven 的配置文件为 settings-offline.xml,重写本地仓库为 D:/maven/demo_repo,重启IDEA刷新即可。
    在这里插入图片描述

    2.上传到内网Nexus私服

    Nexus私服搭建网络上有很多教程,这里就不罗嗦了。
    拥有 Nexus 管理员账号密码。
    在 Nexus 上新建一个仓库,比如:http://localhost:8081/repository/demo-releases/

    Nexus 页面手动一个个上传,对于一两个SDK来说很方便,整个仓库就很麻烦了。Nexus没提供批量上传文件夹的操作。但是有单个上传接口,就可以写个脚本遍历本地仓库上传模拟批量上传。

    该图来源于网络,见右下角水印
    该图来源于网络,见右下角水印

    把下面脚本 batch_upload_repo.sh 扔到本地仓库根目录,整个仓库再扔到服务器上,然后执行脚本;(Windows 上使用 git-bash 执行脚本上传也行)结构相对位置例如:D:\maven\demo_repo\com\oracle\ojdbc\ojdbc8\19.3.0.0D:\maven\demo_repo\batch_upload_repo.sh

    sh mvnimport.sh -u yourusername -p yourpassword -r http://localhost:8081/repository/demo-releases/
    
    • 1

    上传完成后,刷新工程正常下载使用。

    附批量上传脚本:

    #!/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}/{} ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    OP 与 OS 设置
    35【Aseprite 作图】苹果——拆解
    云原生Kubernetes:K8S资源控制之污点与容忍
    Android 12.0 ota升级之SettingsProvider新增和修改系统数据相关功能实现
    十年老程序员的职场教训,很受用
    springboot整合mybatis、swagger、代码生成器、Lombok
    JAVA 相关书籍推荐(全)
    Python xml.dom.minidom 读取xml
    jna调用dll文件正常,但是怎么样初始化.ini文件,总是提示未找到.ini文件?
    MindStudio模型训练场景精度比对全流程和结果分析
  • 原文地址:https://blog.csdn.net/qq_36299991/article/details/134349345