【Docker】之安装 Maven私服 Nexus3

前言

  Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。除此之外,Nexus还可以管理Docker镜像。

安装Docker

  Centos下安装Docker参考:Centos8安装Docker

安装Nexus3

下载镜像

  https://help.sonatype.com/repomanager3/product-information/download

docker pull sonatype/nexus3:3.31.0

创建数据目录

mkdir -p /home/data/nexus3/nexus-data

chmod 777 /home/data/nexus3/nexus-data

启动容器

docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 \
--name nexus3 \
--privileged=true \
--restart=unless-stopped \
-e NEXUS_CONTEXT=nexus \
-v /root/.docker/nexus3/nexus-data:/nexus-data \
sonatype/nexus3:3.31.0

参数解释:
8081 端口是nexus的服务端口
8082 端口是用于host镜像仓库的服务端口
8083 端口用户group镜像仓库的服务端口8083端口用户group镜像仓库的服务端口
NEXUS_CONTEXT=nexus 表示在访问Nexus后台web时,需要带上nexus进行访问,如http://ip:8081/nexus

开放端口

# 开放端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload

登录验证

  访问web地址:http://10.211.55.81:8081/nexus
  默认账号为:admin
  默认密码在文件中:/home/data/nexus3/nexus-data/admin.password

有关配置

配置阿里云公共仓库

  Nexus的maven-group的默认查找方式为:maven-releases –> maven-snapshots –> maven-central,我们在中间再加一个阿里云仓库,加快访问速度。

新建maven-aliyun

  依次点击:设置 –> Repository –> Repositories –> Create repository,选择maven2 (proxy)

仓库名字:maven-aliyun(随便填写)
阿里云远程maven仓库地址:https://maven.aliyun.com/repository/public
其他选项:默认即可
参考阿里云Maven中央仓库

修改maven-public

  修改maven-public中的仓库引用及顺序:


  至此,配置完毕!我们在maven使用maven-public仓库地址的时候,会按照如下顺序访问:
  本地仓库 –> 私服maven-releases –> 私服maven-snapshots –> 远程阿里云maven仓库 –> 远程中央仓库

Maven配置使用Nexus

Maven配置私服下载依赖

maven配置私服下载有两种方式:

setting.xml:该文件配置的是全局模式
pom.xml:该文件的配置的是项目独享模式

若pom.xml和setting.xml同时配置了,以pom.xml为准

setting.xml私服配置

  修改maven –> conf –> setting.xml:

<mirrors>
	 <mirror>
		<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
        <id>maven-public</id>
		<!--镜像名称 -->
        <name>maven-public</name>
		<!--*指的是访问任何仓库都使用我们的私服-->
		<mirrorOf>*</mirrorOf>
		<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
        <url>http://10.211.55.81:8081/nexus/repository/maven-public/</url>		
     </mirror>
</mirrors>

  当然,很有可能你并没有搭建私服,属于个人开发,那么也可以直接配置使用阿里云maven仓库

<mirrors>
	<mirror>
		<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
        <id>nexus-aliyun</id>
		<!--镜像名称 -->
        <name>nexus-aliyun</name>
		<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
        <url>https://maven.aliyun.com/repository/public</url>
		<!--被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo1.maven.org/maven2)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。-->
		<mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
pom.xml文件配置

  如果你配置了pom.xml,则以pom.xml为准.

<repositories>
    <repository>
        <id>maven-nexus</id>
        <name>maven-nexus</name>
        <url>http://10.211.55.81:8081/nexus/repository/maven-public//</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

  如果没有私服,也可以配置阿里云maven仓库

<repositories>
   <repository>
      <id>maven-aliyun</id>
      <url>https://maven.aliyun.com/repository/public/</url>
      <releases>
         <enabled>true</enabled>
      </releases>
      <snapshots>
         <enabled>true</enabled>
         <updatePolicy>always</updatePolicy>
         <checksumPolicy>fail</checksumPolicy>
      </snapshots>
   </repository>
</repositories>

Maven配置私服下载插件

pom.xml的配置:
<pluginRepositories>
    <pluginRepository>
        <id>maven-nexus</id>
        <name>maven-nexus</name>
        <url>http://10.211.55.81:8081/nexus/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

Maven配置私服发布依赖

  首先需要将Releases仓库和Snapshots仓库的“Deployment Policy”设置为“Allow Redeploy”。

  1. 第一步,修改setting.xml文件,指定releasessnapshots server的用户名和密码
    <servers>
    	<server>
    		<id>releases</id>
    		<username>admin</username>
    		<password>leeze</password>
    	</server>
    	<server>
    		<id>snapshots</id>
    		<username>admin</username>
    		<password>leeze</password>
    	</server>
    </servers>
  2. 第二步,在项目的pom.xml文件中加入distributionManagement节点
      注意:repository里的id需要和第一步里的server id名称保持一致
    <distributionManagement>
    	<repository>
    		<id>releases</id>
    		<name>Releases</name>
    		<url>http://10.211.55.81:8081/nexus/repository/maven-releases/</url>
    	</repository>
    	<snapshotRepository>
    		<id>snapshots</id>
    		<name>Snapshot</name>
    		<url>http://10.211.55.81:8081/nexus/repository/maven-snapshots/</url>
    	</snapshotRepository>
    </distributionManagement>
  3. 第三步,执行发布
    mvn deploy

  登录Nexus,查看对应的仓库已经有相关的依赖包了.

若项目版本号末尾带有 -SNAPSHOT,则会发布到snapshots快照版本仓库
若项目版本号末尾带有 -RELEASES 或什么都不带,则会发布到releases正式版本仓库

上传第三方jar

PS

一直报错 UnknownHostException: rhc.sonatype.com,参考:解决Docker容器内无法解析DNS的问题