Ubuntu16.04.6下搭建Maven私服仓库(Nexus)

下载Nexus

apt-get update
docker pull sonatype/nexus3
cd /usr/local/
mkdir docker
cd docker
mkdir nexus
cd nexus
vim docker-compose.yml 内容如下
version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus-data

使用下面的命令(docker-compose up -d)启动后会在当前目录生产data目录,需要加上读写权限
chmod 777 data -R

安装 Docker-compose

apt-get install docker-compose
docker-compose version
	docker-compose version 1.17.1, build unknown
	docker-py version: 2.5.1
	CPython version: 2.7.17
	OpenSSL version: OpenSSL 1.1.1  11 Sep 2018

或者不安装Docker-compose直接使用命令启动

docker run -d -p 8081:8081 --name nexus -v /usr/local/docker/nexus/data:/nexus-data --restart=always sonatype/nexus3

启动容器(nexus)

  • 在上述的yam文件同级目录下执行
docker-compose up -d

查看容器信息

docker inspect nexus

nexus 使用实战

添加仓库

  • 前提:上面的依赖已经安装完成,并已经启动nexus服务。
  • 第一次启动时较慢,网页可能没有反应,请多等待一会儿,大约2min左右吧,后续再重启就快了。
  • 打开网页输入10.0.1.189:8081 ,未输入登录密码时显示如下
    在这里插入图片描述
  • 点击“Sign in”登录,输入用户名 admin,密码是随机的,需要登录服务器查看,在服务的/usr/local/docker/nexus/data/admin.password里面,不是加密的是明文,复制明文密码登录。
  • 登录后,按照提示修改密码,例如修改成admin123,登录后的界面如下
    在这里插入图片描述

添加“maven2(hosted)”仓库

在这里插入图片描述

默认安装有以下这几个仓库,在控制台也可以修改远程仓库的地址,第三方仓库等。

  • hosted:宿主仓库库或托管资源库。

    • 存放本公司开发的jar包,可是正式版本也是是测试版本
    • 放在本地的资源库,零零散散的jar
    • 从远程仓库中下不到,只能自己在网上找,找到jar下载下来,放在托管资源库中,交给nexus统一管理。
  • proxy:代理仓库或代理资源库。

    • 代理中央仓库、Apache下测试版本的jar包。
    • 配置了外网的maven远程仓库地址的资源库,本地找不到,就会通过代理资源库中的地址,找到远程仓库,从远程仓库中下载所需要的jar,比如从阿里的仓库下载。
  • group:组仓库或组资源库。

    • 使用时连接组仓库,包含Hosted(宿主仓库)和Proxy(代理仓库)
    • 组资源库中并没有jar包
    • 而是把代理资源库和托管资源库统一配置到组资源库中,然后组资源库作为一个唯一的public提供给所有人使用。
    • 建议使用该方式,既可以下载私服jar包,也可以下载中央仓库或阿里等其他服务的,前提是需要将这些添加到该组中。
  • 先创建一个宿主仓库,选择 maven2(hosted),如下
    在这里插入图片描述

  • 之后填写name,自定义但不要与其他名字冲突即可;Version policy选择release,否则通过web界面的upload环节无法显示该仓库,也就无法通过界面上传jar包了;Deployment policy选择 Allow redeploy,否则无法重新发布。如下

在这里插入图片描述

添加“maven2(proxy)”仓库

  • 创建仓库时选择maven2(proxy)类型,填写name和url(http://10.0.1.189:8081/repository/alimaven/)即可,如下
    在这里插入图片描述### 创建“maven2(group)”仓库
  • 创建仓库时选择maven2(group)类型,填写name和过滤条件即可
  • 过滤条件为上面添加的两个库,添加顺序影响mvn依赖库下载时的搜索顺序,建议宿主库优先,其次是阿里库,如下

在这里插入图片描述

私服的库准备完成后开始通过maven使用

配置maven的setting.xml文件

  • setting.xml 在maven的安装目录的conf目录下
  • 配置“servers”标签,目的是标识使用的私服用户名密码和ID
  • 配置“mirror”标签,目的是标识私服地址,如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups></pluginGroups>
  <proxies></proxies>
  <servers>
    <server>
      <id>dilu-group</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>
  <mirrors>    
    <mirror>
      <id>dilu-group</id>
      <name>nexus public repositories</name>
      <url>http://10.0.1.189:8081/repository/dilu-group/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
  <profiles></profiles>
</settings>
  • 这里的ID配置成“dilu-group”,“alimaven”和“dilu-release”就都由该组库管理
  • 假如在工程中执行 mvn package时,会依次从dilu-release、alimaven仓库中搜索依赖的jar包

上传jar包

  • 不是一定需要上传的,只有那些从中央仓库中无法下载到的jar才建议上传托管的
  • 无法从中央仓库下载的jar可以放到上面创建的宿主仓库中进行管理

选择宿主仓库进行上传

  • 进入上传页面,选择对应的宿主仓库
    在这里插入图片描述
  • 进入仓库后添加jar包
    在这里插入图片描述
    • upload界面不显示组库,目前只显示release版本的素组仓库,所以只能看到我们刚才添加的dilu-release,本次也是上传到该库
    • Group ID,可以自定义,主要影响的是代码中import时的路径,可以重复。
    • Artifact ID,可以自定义,主要用于maven下载依赖时可以跟Group ID一起确唯一的jar包
    • Version,jar包版本,版本只能是发布的版本,例如不能是1.27-SNAPSHOT版本,否则上传失败,nexus暂时不支持通过web界面上传非稳定版本的jar包,如果需要传非稳定版本可以通过maven命令行的方式,文章最后将详细介绍这种方式。
  • 上传完jar包后可以通过如下界面查看
    在这里插入图片描述
  • 进入指定库,查看具体的jar信息
    在这里插入图片描述

SNAPSHOT版本上传私服和使用

  • dilu-release可以通过UI界面上传(见上文),但是snapshot版本的jar包无法传到release仓库中,所以才有了这部分讲解,通过添加snapshot仓库,上文已经加了,这里配置上即可。另外顺便也把dilu-release配置上,使用非UI界面也可以发布到该release仓库了。
  • 基于上文继续讲解,目前已经添加了代理服务器alimave、dilu-release、dilu-snapshot
  • 配置maven的setting.xml文件
<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups>
  </pluginGroups>

  <proxies>
  </proxies>

  <servers>
    <server>
      <id>dilu-release</id>
      <username>admin</username>
      <password>Admin123</password>
    </server>
    <server>
      <id>dilu-snapshot</id>
      <username>admin</username>
      <password>Admin123</password>
    </server>
  </servers>

  <mirrors>    
    <mirror>
      <id>dilu-group</id>
      <name>nexus public repositories</name>
      <url>http://10.0.1.189:8081/repository/dilu-group/</url>
      <!-- 匹配该镜像下所有的仓库。 此时pom中定义的仓库都不生效 -->
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <!-- id必须唯一 -->
      <id>dilu-release</id>
      <repositories>
        <repository>
          <!-- id必须唯一 -->
          <id>dilu-release-1</id>
          <!-- 仓库的url地址 -->
          <url>http://10.0.1.189:8081/repository/dilu-release/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>
    </profile>
		
    <profile>
      <!-- id必须唯一 -->
      <id>dilu-snapshot</id>
      <repositories>
        <repository>
          <!-- id必须唯一 -->
          <id>dilu-snapshot-1</id>
          <!-- 仓库的url地址 -->
          <url>http://10.0.1.189:8081/repository/dilu-snapshot/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>

  </profiles>

  <activeProfiles>
    <activeProfile>dilu-snapshot</activeProfile>
    <activeProfile>dilu-release</activeProfile>
  </activeProfiles>

</settings>
  • 详细说明

    • 配置文件中基于上文中的“dilu-group”,增加servers、profiles、activeProfiles标签的配置
      • servers标签说明发布仓库的用户名和密码,使用mvn命令发布时要用到用户名和密码,该用户名和密码就是登陆nexus界面的用户名和密码
      • profiles标签说明发布仓库的地址
      • activeProfiles标签用于激活profiles标签中配置的仓库,否则profiles标签中配置的仓库不生效
    • 说明
      • dilu-group组仓库中包含了dilu-snapshot、dilu-release、alimaven(该仓库是代理阿里云的仓库,不支持发布到该仓库中,所以不需要配置这些标签–servers、profiles、activeProfiles)
      • mvn package 编译下载依赖时,添加mirrors标签,配置dilu-group组即可,之后所有的依赖都会从这组里的所有仓库中获取
      • 如果需要发布jar包到上述组中,则需要配置servers、profiles、activeProfiles标签,主要将非代理仓库dilu-snapshot、dilu-release对开发者开放
  • 实战上传snapshot版本的jar包到dilu-snapshot仓库,以fastdfs为例

    • 必须使用源代码编译,再发布。从github下载,git clone https://github.com/happyfish100/fastdfs-client-java.git
    • 进入目录,编译jar包,本次生成了./target/fastdfs-client-java-1.29-SNAPSHOT.jar
    • 使用mvn deploy:deploy-file 命令发布jar包,mvn执行必须和pom.xml在同级目录
    • 注意-DrepositoryId使用的名称跟setting.xml配置文件里对应字段的关系,如果没有 -Durl和-DrepositoryId字段则默认发布到本地仓库中(~/.m2目录下)
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-snapshot/ -DrepositoryId=dilu-snapshot --errors --debug
      
  • 扩展:

    • 当然上面的命令也可以用于发布jar包到release库
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
      
    • 复用当前pom.xml也可以发布其他不相关的jar包,例如
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=mysql-connector-java -Dversion=5.1.39 -Dpackaging=jar -Dfile=/home/huangzg/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
      

参考资料

  • https://www.cnblogs.com/endv/p/11204704.html
  • https://www.cnblogs.com/wbl001
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值