WSL子系统通过docker安装maven私服
为什么要使用maven私服
maven简化了项目依赖管理,让我们不再需要像以前一样去网上下载指定版本jar包,以及jar包依赖的jar包,只需要配置maven坐标,即可完成依赖引用。
正常来说,我们本地开发使用maven中央仓库就够用了,构建项目时,如果依赖的maven坐标不存在,那么maven就会自动从中央仓库(国内一般用阿里云maven仓库)下载,并保存到本地仓库,然后就能从本地仓库拷贝到项目中完成项目编译打包等等操作。
但实际工作中,有些公司办公网络都是内网,因此就不能访问maven中央仓库,此时就需要在局域网里找一台有外网权限的机器,搭建maven私服。或者公司虽然能访问外网,但是开发人员比较多,那么每个开发人员都要从maven中央仓库去下载jar包(绝大部分都是重复的),一是比较消耗带宽,下载jar包很慢,二是大量重复下载很容易导致公司IP(甚至IP段)被拉进黑名单,此时也应该考虑搭建maven私服。
maven私服工作流程
构建项目时,如果本地仓库中没有maven坐标对应的jar包,那么会去maven私服下载,如果maven私服也没有对应jar包,那么maven私服会去中央仓库下载并保存,然后本地仓库就能从maven私服下载到对应的jar包了。
maven私服工作流程如下图所示:
通过docker安装maven私服
#1.下载nexus3的docker镜像
docker pull sonatype/nexus3
#2.创建挂载目录(下载的jar包等数据需要保存在本地磁盘上)
mkdir /root/nexus-data
#3.启动docker容器
docker run -d -p 38081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
#maven私服启动需要点时间,等待1分钟即可,也可以通过docker ps -a 以及docker inspect containerId来查看容器状态
#启动成功后,即可通过http://ip:38081访问了
#由于博主是在WSL子系统下安装maven私服,这里踩到了第一个坑,通过http://127.0.0.1:38081访问一直访问不了,进行了关闭防火墙,修改hosts文件等一系列操作,都没能解决问题,然后我突然间想到之前有在WSL子系统下安装mysql数据库,安装成功之后是可以正常访问的,于是就找到自己之前写的博客,发现访问数据库用的是localhost,最终把访问地址改成http://localhost:38081一下就可以访问了
配置maven私服用户名密码
nexus3.17版本之前,默认的账号密码是admin/admin123,但是博主装的版本用默认的账号密码登录不上,上网查了一下发现3.17版本密码改成随机的了,保存在一个文件里。
查看初始密码步骤如下:
#1.找到maven私服nexus3的容器id
docker ps
#2.进入maven私服nexus3容器
docker exec -it containerId /bin/bash
#3.切换到admin.password文件所在目录
cd /opt/sonatype/sonatype-work/nexus3
#4.查看maven私服默认密码
cat admin.password
登录成功后,系统提示马上设置新的密码,admin.password文件就会失效了。
创建maven私服账号
点击页面左侧菜单栏的Users,点击+Create local user按钮创建用户即可,用户id和密码都设置好,注意Status设置为Active表示用户可用,Roles选择nx-admin,表示用户拥有管理员权限,既可以从maven私服下载jar包,也可以发布jar包到maven私服。
创建maven私服仓库
点击页面左侧菜单栏的Repositories,点击+Create repository按钮创建maven私服仓库,选择maven2(hosted),然后输入仓库名称,Version policy选择Release,Layout policy选择Permissive,Deployment policy选择Allow redeploy。
版本策略(Version Policy):
-
Release: 正式版本
-
Snapshot: 快照版本
-
Mixed: 混合模式
布局策略(Layout Policy):
-
Strict:严格
-
Permissive:宽松
部署策略(Deployment Policy):
-
Allow Redeploy:允许重新部署
-
Disable Redeploy:禁止重新部署
-
Read-Only:只读
创建maven私服阿里云代理仓库
点击+Create repository按钮创建maven私服仓库,选择maven2(proxy),输入仓库名称aliyun-repository,Version policy选择Release,Layout policy选择Strict,配置Remote storage地址:http://maven.aliyun.com/nexus/content/groups/public/,保存即可。
然后点击Repositories下的maven-public,将阿里云代理加到group中,并调整其优先级,调整完毕界面如下:
附一:Maven 配置使用私服(下载依赖)
1,基本说明
(1)Maven 配置私服下载有两种方式:
-
setting.xml:该文件配置的是全局模式
-
pom.xml:该文件的配置的是项目独享模式
注意:若 pom.xml 和 setting.xml 同时配置了,以 pom.xml 为准。
(2)当我们在 maven 使用 maven-public 仓库地址的时候,会按照如下顺序访问:本地仓库 --> 私服 maven-releases --> 私服 maven-snapshots --> 远程阿里云 maven 仓库 --> 远程中央仓库。
2,通过 setting.xml 文件配置
(1)setting.xml 文件配置样例如下。配置后不需要再配置 pom.xml 文件,即可通过私服下载 jar 依赖包。
<mirrors>
<mirror>
<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>maven-public</id>
<!--镜像名称 -->
<name>maven-public</name>
<!--*指的是访问任何仓库都使用我们的私服-->
<mirrorOf>*</mirrorOf>
<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://192.168.60.133:8081/repository/maven-public/</url>
</mirror>
</mirrors>
(2)如果我们并没有搭建私服,属于个人开发,那么也可以直接配置使用阿里 云maven 仓库:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
3,通过 pom.xml 文件配置
(1)pom.xml 文件配置样例如下。如果我们配置了 pom.xml,则以 pom.xml 为准。
<repositories>
<repository>
<id>maven-nexus</id>
<name>maven-nexus</name>
<url>http://localhost:38081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
(2)如果没有私服,我们同样也可以配置阿里云 maven 仓库,此时直接在全局的setting.xml配置即可。
附二:Maven 配置使用私服(下载插件)
下面是一个使用 pom.xml 配置样例:
<pluginRepositories>
<pluginRepository>
<id>maven-nexus</id>
<name>maven-nexus</name>
<url>http://localhost:38081/nexus/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
附三:Maven 配置使用私服(发布依赖)
(1)首先修改 setting.xml 文件,指定 releases 和 snapshots server 的用户名和密码:
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>123</password>
</server>
</servers>
(2)接着在项目的 pom.xml 文件中加入 distributionManagement 节点:
注意:repository 里的 id 需要和上一步里的 server id 名称保持一致。
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:38081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:38081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
(3)执行 mvn deploy 命令发布:
(4)登录 Nexus,查看对应的仓库已经有相关的依赖包了。
发布到的仓库说明:
-
若项目版本号末尾带有 -SNAPSHOT,则会发布到 snapshots 快照版本仓库
-
若项目版本号末尾带有 -RELEASES 或什么都不带,则会发布到 releases 正式版本仓库