明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

Windows使用Nexus搭建Maven私服

Posted on 2023-08-09 10:43  且行且思  阅读(405)  评论(0编辑  收藏  举报

简介

Maven私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件,有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库,否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

下载(version-2.x)

官网下载页:https://www.sonatype.com/download-oss-sonatype

链接:https://pan.baidu.com/s/1z-L29iFBD4y_i1PRMzwryA         nexus-2.14.1-02-win.zip
提取码:tk3h

链接:https://pan.baidu.com/s/1rfeWSb6wWb3kzekNdHQkqQ     nexus-3.38.0-01-win64
提取码:rwb6

安装 【在安装Nexus前我们要确保系统已经安装了JDK1.8】

  • 解压安装包nexus-2.14.1-02-win.zip,打开命令提示符【需要以管理员身份运行cmd命令行窗口】,进入nexus-2.14.1-02-win.zip/bin目录
  • 安装命令

    nexus.bat install

  •  

    3.x 安装:

  • nexus.exe /install
  • 卸载命令
    nexus.bat uninstall
     
  • 方法一:进入到nexus-3.27.0-win64\nexus-3.27.0-03\bin该目录下,有个启动程序nexus.exe
  • 需要注意,以管理员权限打开cmd,进到该目录下 执行启动命令:nexus.exe /run nexus
  • 启动成功,使用内置jetty服务器提供web服务。
  • 打开浏览器访问:http://localhost:8081/

  • 1.配置运行的端口
    在nexus-3.38.0-01-win64\nexus-3.38.0-01\etc目录下的nexus-default.properties文件配置访问端口
  •  

  • 2.配置运行的占用内存
    在nexus-3.38.0-01-win64\nexus-3.38.0-01\bin目录下的nexus.vmoptions文件配置内存
  • 这里按照需求配置,如果电脑内存比较小,可以配置一个g

    • 方法二:安装为Windos服务

      以管理员身份运行CMD命令窗口

      进入nexus3安装目录的bin目录下

      E:\nexus-3.38.0-01-win64\nexus-3.38.0-01\bin

      通过nexus.exe /install nexus3 命令,安装为名为nexus3的Windows服务

       查看windows服务,并且启动nexus3
  • 打开服务窗口,nexus已安装,右键启动该服务

     

     

  • 打开浏览器,访问:http://localhost:8081/nexus/

     

  • 点击右上角Log In,使用默认账号:admin,密码:admin123登录, 到这里我们就已经完成了私服的搭建。
  • 用户名默认为admin
    nexus3版本初始密码在nexus-3.38.0-01-win64\sonatype-work\nexus3目录下的admin.password文件里, 登陆之后后会让你修改密码,修改之后,这个文件会被删除

 

目前的 Nexus3 用户名 admin 的初始化密码不再是 admin123,需要在文件中去查看密码。

cat /opt/sonatype/sonatype-work/nexus3/admin.password

输出后的密码是一串 uuid,这段就是密码,不要考虑太多,直接全部复制去登陆。登录成功后会有个提示修改密码的操作,修改密码就可以了。

修改密码后一定要记住,在修改密码完成之后 admin.password ⽂件会⾃动删除。

 

 

二、Nexus修改默认端口

1、找到Nexus的配置文件nexus.propertiesNexus根目录/conf/nexus.properties

 

2、更改为自定义端口

 

3、修改管理员账号密码

使用管理员账号登录后点击上方profile,进入到个人信息页面即可修改密码

 

4、Nexus仓库类型介绍

登陆Nexus,在左边菜单栏里选择Repositoriesrepository的类型有一下几种:

  • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第三方库
  • proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库
  • group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可
  • Nexus预置了3个本地仓库,分别是ReleasesSnapshots3rd Party

    • Releases:存放自己项目中发布的构建, 通常是Release版本的
    • Snapshots:存放非release版本, 非稳定版本
    • 3rd Party: 存放第三方库

    Nexus建库

    Add-->HostedRepository

     

    然后选择PublicRepositories,打开configuration选项卡,将自己创建的仓库添加到group,如图从右侧移到左侧,点击save保存,至此,已经成功搭建好自定义的仓库了

    Nexus创建账号

    按图创建账号

     

    jar包上传下载配置

    • 远程仓库认证,在settings.xml中配置<servers>节点
      <servers>
            <server>
              <id>tbsnexus</id>
              <username>tb-user</username>
              <password>P@ssw0rd</password>
            </server>
      </servers>

      上述代码中配置了一个idtbsnexus的远程仓库认证信息,Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息,认证用户名为tb-user,认证密码为P@ssw0rd,这里的关键是id元素,id没有要求,随便定义,但是后面配置远程仓库的id必须和这里的id保持一致,正是这个id将认证信息与仓库配置联系在了一起

     

    配置远程仓库

    <profiles>
        <profile>
          <id>tbsnexus</id>
          <repositories>
            <repository>
              <id>tb-repositories</id>
              <name>Repository for tb-repositories</name>
              <url>http://39.100.65.160:8081/nexus/content/repositories/tb-repository/</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>true</enabled>
              </snapshots>
            </repository>
          </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>tbsnexus</activeProfile>
    </activeProfiles>

    配置仓库镜像

    <mirror>
        <id>tb-repositories</id>
        <mirrorOf>*</mirrorOf>
        <url>http://39.100.65.160:8081/nexus/content/repositories/tb-repository/</url>
    </mirror>
    <!--配置阿里云Maven镜像-->
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    <!--配置华为云Maven镜像-->
    <mirror>
        <id>huaweicloud</id>
        <mirrorOf>*</mirrorOf>
        <url>https://mirrors.huaweicloud.com/repository/maven/</url>
    </mirror>

     

    默认的,如果本地仓库找不到依赖的构件,这时需要东西时先到Nexus上找,如果发现Nexus服务关闭后,会自动到中央仓库找,至此,已经可以私服下载jar包了

    上传jar

    • 定位到要上传的jar包的目录
    • 执行命令
      mvn deploy:deploy-file -DgroupId=com.tbtech -DartifactId=tb-tools -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=tb-tools-1.0-SNAPSHOT.jar -Durl=http://39.100.65.160:8081/nexus/content/repositories/tb-repository -DrepositoryId=tbsnexus
      • deploy:deploy-file表示发布独立的文件
      • groupIdartifactIdversion可根据需要设定
      • urlNexus服务器中需要上传的仓库路径
      • repositoryIdserverid必须一致
      • 上传结果

         

         

        上传成功后,我们只需在pom.xml中引入<dependency>就可以下载该jar包了

         

        <dependency>
          <groupId>com.tbtech</groupId>
          <artifactId>tb-tools</artifactId>
          <version>1.0-SNAPSHOT</version>
        </dependency>

         

         

        二、本地jar包上传

         1、手动方式上传jar包

        在nexus界面点击左边的upload然后选择要上传的仓库

         

        选择Jar包上传,然后完善相应信息,点击上传即可

         

        2、使用git命令一次性上传

        如果需要将Maven本地库的所有jar 一次性导入Nexus , 则使用单次导入的方式势必不太可能。
        这里使用Bash脚本可以将Maven 本地库目录的所有jar , 一次性导入到Nexus中。 如果是在Windows环境中, 可以安装Git , 使用Git Bash 执行 sh 脚本。

        在本地maven仓库的目录下新建一个.sh文件(我创建的文件名是mavenimport.sh)mavenimport.sh需要在maven库目录下
        复制以下代码:  https://files.cnblogs.com/files/Fooo/mavenimport.rar?t=1693958641&download=true

        #!/bin/bash
        # copy and run this script to the root of the repository directory containing files
        # this script attempts to exclude uploading itself explicitly so the script name is important
        # Get command line params
         
        while getopts ":r:u:p:" opt; do
            case $opt in
                r) REPO_URL="$OPTARG"
                ;;
                u) USERNAME="$OPTARG"
                ;;
                p) PASSWORD="$OPTARG"
                ;;
            esac
        done
         
        find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;

         

        在仓库目录右键打开git bash

         

        输入以下命令 (./mavenimport.sh -u 你的nexus用户名 -p 你的nexus密码 -r http://127.0.0.1:8081/repository/my_repo/)

        ./mavenimport.sh -u admin -p admin123 -r http://ip:9090/repository/maven-releases/

        注意调用sh的文件名、用户名、密码、ip、端口、仓库名都得根据自己的情况修改

        输入之后按回车键执行即可

        上传完毕之后可在仓库中查看上传的jar包

         补充2点:
        1、nexus内置库说明:
        maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
        maven-releases:私库发行版jar
        maven-snapshots:私库快照(调试版本)jar
        maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

         2、命令控制台报错:Maven Failed to deploy artifacts: status: 405 PUT

         问题原因:我们的jar包上传,应该使用hosted类型的nexus仓库。

         

         

         

         

        四、Maven配置 (在源码项目中使用 Maven的deploy 命令发布

        4.1 settings.xml设置

        找到并打开settings.xml文件,添加私服配置:

        在servers中添加如下配置

        
        
        <server>
            <!-- 这里的id可以随意取,但是我们在pom.xml中配置的id要与此一致 -->
            <!-- release正式版本 -->
            <id>local-release</id>
            <username>admin</username>
            <password>123456</password>
        </server>
        <server>
            <!-- 这里的id可以随意取,但是我们在pom.xml中配置的id要与此一致 -->
            <!-- snapshot快照版本 -->
            <id>local-snapshot</id>
            <username>admin</username>
            <password>123456</password>
        </server>
        </servers>
        
        
         

        在mirrors中添加如下配置:

        <!-- 私服地址 -->
        <mirror>
            <!--This is used to direct the public snapshots repo in the profile below over to a different nexus group -->
            <id>local</id>
            <mirrorOf>*</mirrorOf>
        <!-- 此处配置你的Nexus地址 --> <url>http://127.0.0.1:8082/repository/maven-public/</url> </mirror>

         其中mirrorOf=”*”表示将所有仓库请求地址都指向私服。

        ,mirrorOf=”central”表示只有从中央仓库请求的地址会被指向到新的地址,而其他的仓库请求会被忽略。

        4.2 pom.xml配置

        在项目中的pom.xml中添加如下配置:

        <repositories>
            <repository>
                <id>nexus</id>
                <name>Nexus Repository</name>
        <!-- 这里与settings.xml中配置的url保持一致 --> <url>http://127.0.0.1:8082/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <!--snapshots默认是关闭的,需要开启 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
        <!-- 如下配置,如果是微服务项目,可以只加在最外层的pom.xml中,子模块只需加上面的配置即可 --> <distributionManagement> <snapshotRepository> <!-- 这里的id与settings.xml中配置的id保持一致 --> <id>local-snapshot</id> <name>LOCAL-SNAPSHOT</name> <url>http://127.0.0.1:8082/repository/maven-snapshots/</url> </snapshotRepository> <repository> <!-- 这里的id与settings.xml中配置的id保持一致 --> <id>local-release</id> <name>LOCAL-RELEASE</name> <url>http://127.0.0.1:8082/repository/maven-releases/</url> </repository> </distributionManagement>
      • 需要注意: server 的 id 和 repository的id 要一致。
        至此,Nexus的Maven相关配置就完成了。

         

        五、测试

        加好配置后,进入对应的项目下,执行 mvn deploy,最后会出现如图所示的日志(前提是你项目能正常install):

         

        这里我们就可以看到我们的项目已经发布到了私服。具体位置和项目的groupId有关:

         

        如我这里的groupId是org.example,version后缀带SNAPSHOT,代表快照。会存入我们配置的maven-public仓库下,如图:

         

        至此Nexus私服的基本搭建及Maven配置就完成了