使用Docker基于Nexus3快速搭建Maven私有仓库

前言

近期在做系统优化,重构等工作,关于本地jar包、三方jar(未上传到中央仓库)的管理比较的混乱,因此决定搭建一个Maven的私服来完善一下这一块儿;

  • Maven的基础示意图

    通常,我们并没有使用到虚线标识的那两块儿,基本都是通过本机的Maven直接访问到中央仓库;
问题分析

Maven给我们带来的诸多的好处,这里就不多说了,这里仅仅列一些直接使用中央仓库可能会给我们带来的问题。及使用私服是如何解决的。

  • 网络问题
    • 问题原因
      由于国内安全的网络环境,导致经常会出现无法连接远端maven仓库从而导致jar包更新失败,这个时候,我们就只能被迫去学会科学上网了。
    • 解决方式
      当我们搭建好私服之后,本地优先是连接的私服,如果私有有就直接下载私服的资源并使用,这样相当于只需要私服到中央仓库下载一次就好了,之后的资源获取使用的就是私有仓库,那么就不会出现网络问题而导致jar无法更新;
  • 私有项目的管理
    企业内部的资源,我们就可以上传到本地私服,这样所有的团队成员就可以通过maven的依赖进行资源管理了;
  • 三方未上传到maven中央仓库的类库
    部分开源的三方类库没有上传到Maven中央仓库的,那么我们也可以将其上传到本地私服,这样团队成员之间就可以通过maven依赖来使用这些资源了;
环境搭建
说明
  • 软硬件环境
    CentOS7
    Docker
    Nexus3
  • 准备工作
    • Docker安装
      自从开始使用Docker之后,每次这种安装软件的操作,第一刻想到的就是看看有没有Docker的方式;真的可谓是:一用Docker一时爽,一直用一直爽啊!,如果没有安装Docker的,可以参考:Linux下安装Docker及基础操作
    • Nexus3镜像
      Nexus3 Docker官网镜像地址,这里使用的是最新版,使用以下指令下载镜像:
      docker pull sonatype/nexus3
      
Nexus3安装
  • 创建nexus的挂载文件夹
    文件夹的目录可以根据个人情况指定,如果不想挂载文件夹,那么可以忽略这一步(记住:忽略之后,下面的指令把-v的那部分去掉),资源就由容器自行去管理,为了数据的安全性,建议挂载操作
    mkdir -p /home/mvn/nexus-data  && chown -R 200 /home/mvn/nexus-data
    
  • 安装
    由于我的8081被其他业务占用了,这里就使用了8181作为了nexus的端口
    docker run -d -p 8181:8081 --name nexus -v /home/mvn/nexus-data:/nexus-data sonatype/nexus3
    
    两条指令(不挂载的话一条指令),Nexus3的安装就完成了,是不是超级爽!!!
  • 管理页面
    访问监听的端口即可进入管理平台
    默认管理员用户名:admin 密码:admin123
  • 创建本地库
    • 作用
      存放本地资源及三方资源,后续需要用上,这里就先创建了放这里
    • 创建第一步
    • 创建第二步
      在这里插入图片描述
    • 创建第三步
本地Maven配置
修改setting.xml
  • 添加server配置
    <server>
    	<id>nexus-releases</id>
    	<username>admin</username>
    	<password>admin123</password>
    </server>
    <server>
    	<id>nexus-snapshots</id>
    	<username>admin</username>
    	<password>admin123</password>
    </server>
    <server>
    	<id>3rdParty</id>
    	<username>admin</username>
    	<password>admin123</password>
    </server>
    
  • 添加mirrors配置
    <mirror>
        <id>nexus</id>
        <name>nexus Mirror chenshu repository</name>
        <url>http://192.168.1.207:8181/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>
      </mirror>
    <mirror>
        <id>3rdParty</id>
        <name>3rd party repository</name>
        <url>http://192.168.1.207:8181/repository/3rdParty/</url>
        <mirrorOf>3rdParty</mirrorOf>
    </mirror>
    
  • 配置profiles
    <profile>
    	<id>jdk1.8</id>
    	<activation>
    	<activeByDefault>true</activeByDefault>
    	<jdk>1.8</jdk>
    	</activation>
    	<properties>
    		<maven.compiler.source>1.8</maven.compiler.source>
    		<maven.compiler.target>1.8</maven.compiler.target>
    		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    	</properties>
    	<repositories>
    		<repository>
    			<id>maven-public</id>
    			<url>http://192.168.1.207:8181/repository/maven-public/</url>
    			<releases>
    				<enabled>true</enabled>
    			</releases>
    			<snapshots>
    				<enabled>true</enabled>
    				<updatePolicy>always</updatePolicy>
    			</snapshots>
    		</repository>
    		<repository>
    			<id>3rdParty</id>
    			<url>http://192.168.1.207:8181/repository/3rdParty/</url>
    			<releases>
    				<enabled>true</enabled>
    			</releases>
    			<snapshots>
    				<enabled>true</enabled>
    				<updatePolicy>always</updatePolicy>
    			</snapshots>
    			</repository>
    		</repositories>
    </profile>
    
上传本地Jar
  • 创建或下载本地资源

    假定以上jar为本地或者三方的jar
  • 使用以下命令上传到本地私有库
    mvn deploy:deploy-file -DgroupId=com.lupf -DartifactId=mymaven -Dversion=1.0.0 -Dpackaging=jar -Dfile=mymaven.jar -Durl=http://192.168.1.207:8081/repository/3rdParty/ -DrepositoryId=3rdParty
    
    • 指令说明
      -DgroupId:jar的groupId
      -DartifactId:jar的artifactId
      -Dversion:jar的版本
      -Dpackaging:指定包为jar
      -Dfile:文件地址,可以设置绝对路径,由于我cmd进入了对应的目录,下面的指令使用的相对路径
      -Durl:本地仓库的地址
      -DrepositoryId:仓库名称
使用本地包
  • pom.xml添加maven依赖
  • 更新拉取资源
    使用以下指令
    mvn compile -U
    
结合Idea上传本地项目至私有库

企业中,不可避免的存在多人、多部门协同开发,为了开发、联调更加方便,我们可以将依赖上传至本地仓库,多方进行依赖,即可快速获取到他人或其他项目组的资源,进行快速开发、联调及测试。

  • 创建maven项目
    idea new一个即可

  • pom文件添加本地仓库的配置
    记得把以下的地址改为个人私有仓库的地址

        <repositories>
            <repository>
                <id>nexus</id>
                <name>Nexus Repository</name>
                <url>http://192.168.1.207:8181/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>nexus</id>
                <name>Nexus Plugin Repository</name>
                <url>http://192.168.1.207:8181/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>
        <distributionManagement>
            <repository>
                <id>nexus-releases</id>
                <name>Nexus Release Repository</name>
                <url>http://192.168.1.207:8181/repository/maven-releases/</url>
            </repository>
            <snapshotRepository>
                <id>nexus-snapshots</id>
                <name>Nexus Snapshot Repository</name>
                <url>http://192.168.1.207:8181/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>
    
  • 编译上传

    mvn deploy
    


  • 开发版及正式版

    version中,有-SNAPSHOT就是开发版,没有就是稳定正式版,他们会分别上传到maven中的maven-snapshots和maven-releases

  • snapshots和releases的区别
    snapshot:每次都会从服务器拉取一个最新的版本使用,因此这种版本很适合开发过程中使用,当有bug或者调整,维护提交了之后,使用就会获取到最新的使用。
    releases:当检测到本地的maven仓库有相应的版本之后,不会去服务器拉取,就直接使用本地的版本了。

到此,本地资源库已经搭建成功并且可以正常使用了,后续使用如果有问题,再来完善!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一行Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值