【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
开放端口
# 开放端口
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-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”。
- 第一步,修改
setting.xml
文件,指定releases
和snapshots
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>
- 第二步,在项目的
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>
- 第三步,执行发布
mvn deploy
登录Nexus,查看对应的仓库已经有相关的依赖包了.
上传第三方jar
PS
一直报错 UnknownHostException: rhc.sonatype.com
,参考:解决Docker容器内无法解析DNS的问题