WSL子系统通过docker安装maven私服

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私服。

扫描二维码关注公众号,回复: 12592991 查看本文章

创建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.xmlsetting.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 文件,指定 releasessnapshots 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 正式版本仓库

猜你喜欢

转载自blog.csdn.net/l229568441/article/details/113801511
今日推荐