• Maven私服创建--Nexus


    目录

    一、概述

    1、Nexus介绍

    2、Nexus安装

    3、Nexus功能

    3.1、Browse

     3.2、Administrator

    3.3、更多功能查看文档

    4、Nexus配置Maven私服

    5、添加国内的仓库镜像


    一、概述

            我们通常使用Maven或Gradle作为项目的管理和构建工具,它们的一个主要功能就是提供了一套依赖管理机制

    我们所需要的所有构件都会通过Maven的中央仓库下载到本地。

    由于中央仓库在国内访问较慢,为了提高访问速度,我们通常使用国内的第三方Maven仓库。

    但是,毕竟第三方仓库的访问也需要网络,团队中所有人都重复的从Maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,很多情况下项目的开发都是在内网进行的,可能都不允许访问外网,根本连接不了Maven的中央仓库和第三方的Maven仓库。

    就这样,我们就需要搭建一套自己的私有仓库,也叫私服。

    1、Nexus介绍

            Nexus是Maven仓库管理器,也可以叫Maven的私服。Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个构件。Nexus是一套"开箱即用"的系统,不需要数据库,它使用文件系统加Lucene来组织数据。

            Nexus Repository是以Java和JavaScript为主,实现的一个包含前端与后台的Web服务。后台方面,它采用Jetty作为应用服务器、Karaf作为OSGi容器、OrientDB作为数据库。前端方面,它使用Swagger UI作为框架,是一个单页面Web App。

            另外,它也通过Resteasy支持REST API,可以通过网络进行访问控制。并且,自行实现了一个插件系统,用插件的方式支持了更多复杂的功能。比如Maven、PyPI、Docker这些支持,都是由插件实现的。如果希望支持其他方式的代理、缓存、发布,比如 APT,也可以通过插件定制。

    2、Nexus安装

    Nexus官网   Products--->REPOSITORY MANAGEMENT  Nexus Repository

    Nexus目前官网上(Download)已经很难下载了.

    win64

    nexus-3.31.1-01-win64

    链接:https://pan.baidu.com/s/1iRA9jQ0hr4MMiQd04514RQ

    提取码:ka7s

    1、Nexus Win安装,解压即可。

    2、配置环境变量:path

    添加bin目录到path环境变量:D:\.m2\nexus-3.31.1-01-win64\nexus-3.31.1-01\bin

    3、端口配置

    配置文件:nexus-3.31.1-01\etc\nexus-default.properties

    application-port=8081

    4、启动

    打开cmd,输入nexus /run

    启动完成大约5分钟。出现如下内容代表启动成功。

    1. C:\Users\Administrator>nexus /run
    2. 2022-09-25 19:40:52,001+0800 INFO [FelixStartLevel] *SYSTEM org.sonatype.nexus.pax.logging.NexusLogActivator - start
    3. 2022-09-25 19:40:52,461+0800 INFO [FelixStartLevel] *SYSTEM org.sonatype.nexus.features.internal.FeaturesWrapper - Fast FeaturesService starting
    4. .............................................
    5. 2022-09-25 19:44:29,309+0800 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.Server - Started @220430ms
    6. 2022-09-25 19:44:29,312+0800 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer -
    7. -------------------------------------------------
    8. Started Sonatype Nexus OSS 3.31.1-01
    9. -------------------------------------------------

    5、访问

    http://localhost:8081/

    启动成功后台会报超时错误,画面成功。

    1. org.apache.http.conn.ConnectTimeoutException: Connect to sonatype-download.global.ssl.fastly.net:443 [sonatype-download.global.ssl.fastly.net/199.59.148.89] failed: connect timed out
    2. at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
    3. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)

     6、登录

    点击画面上右侧Sign in

    用户名:admin

    密码存放于路径下的配置文件admin.password中

     输入完,进行修改密码

    同意,同意,下一步。完成。

    7、后台超时错误消除outreach

    1. 2022-09-25 19:47:05,312+0800 WARN [qtp752051546-103] *UNKNOWN com.sonatype.nexus.plugins.outreach.internal.outreach.SonatypeOutreach - Could not download page bundle
    2. org.apache.http.conn.ConnectTimeoutException: Connect to sonatype-download.global.ssl.fastly.net:443 [sonatype-download.global.ssl.fastly.net/199.59.148.89] failed: connect timed out
    3. at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
    4. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)

    按照下图找到outreach点击进入,只有登录后才能有配置按钮。

     进入Settings

    取消Enable this capability勾选。点击Save保存。弹出不能为null,继续点击Disable,确定。

    此时outreach变为灰色

    重启Nexus,重新登录没有超时报错信息了。

    8、把Nexus注册进服务

    需要以管理员身份打开cmd,输入nexus /install

     在服务中开机即启动。

    3、Nexus功能

    3.1、Browse

    Welcome:欢迎界面。

    Search:搜索界面,可以根据自己的需求搜索想要的构件是否存在。

    Browse:浏览界面,列表展示配置的所有仓库,在点击某一仓库记录的时候,可以浏览该仓库中拥有的构件。

    Upload:上传界面,主要是用来将自己的jar包上传到私服上的Maven仓库,也可以将nuget构件上传到私服上的nuget库。

     3.2、Administrator

    Repository:提供仓库管理功能

    Repositories:提供仓库的配置功能,支持创建以下三种类型的仓库

            hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的库。

            proxy:代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。

            group:仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

    Blob Stores:提供仓库中构件的存储,简单来说就是仓库中的所有的构件就存放在这里,支持几种类型的存储。

            File:将构件存储在文件目录中,这是默认的方式。

    默认的存储路径:An absolute path or a path relative to /blobs

            S3:将构件保存为AWS S3桶中的对象,这需要Nexus托管在AWS上。

            Azure:将构件保存为Microsoft Azure存储账户容器中的对象。

    Cleanup Policies:提供仓库中构件的清理策略,配置清理策略并应用于仓库,那么仓库中的构件将会定期基于该清理策略进行清理。支持按时间顺序、使用频率等方式清理。

    Security:提供权限管理功能。

    Privileges:提供Nexus的权限管理功能,是比较细粒度的权限定义。

    Roles:提供Nexus的角色管理功能,角色可以理解为一组权限的集合。

    Nexus内置了两种角色。

            nx-admin:管理员角色,拥有系统的所有权限。

            nx-anonymous:游客角色,仅拥有读取和搜索的权限。

    Users:提供Nexus的用户管理功能,如果某些仓库仅想对某些人员开放,而不是对所有人开放,可以通过设置凭据访问来限制用户访问仓库,最简单的一种就是用户名密码凭据访问。

    Nexus内置了两个用户。

            admin:管理员用户,默认分配了nx-admin角色。

            anonymous:游客,默认分配了nx-anonymous角色。

    3.3、更多功能查看文档

    Nexus官方文档

    4、Nexus配置Maven私服

    Maven的默认本地仓库在:$(user.home)/.m2/repository,我们下载的jar包都会存放在这里。

    比如执行:

    mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1

    ========================================

    Maven环境变量配置

    1.配置环境变量  maven_home    值:D:\apache-maven-3.5.4。
    2.在path变量的最后面加上       ;%maven_home%\bin     %号前面的;号不能扔掉。
    3.在cmd中输入mvn -version ,如果出现版本信息则正确安装了。  重启机器之后再试一次。
    4.环境变量设置完cmd 执行 mvn -version 最后提示cmd不是内部命令,

            解决方式:在设置环境变量path的时候,可能覆盖了原先设置着的变量,只要在path后面将原来的;%maven_home%\bin变为 ;%SystemRoot%\system32;%maven_home%\bin 即可

    ========================================

    cmd执行上面命令,会创建仓库到$(user.home)/.m2/repository中

    1. C:\Users\Administrator>mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1
    2. [INFO] Scanning for projects...
    3. Downloading from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
    4. [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
    5. Downloading from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom
    6. Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom (6.4 kB at 7.7 kB/s)
    7. ....

    我们可以通过settings.xml文件对Maven进行配置,官方给定settings.xml格式Maven官方settings.xml设置

    1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    3. <localRepository/>
    4. <interactiveMode/>
    5. <offline/>
    6. <pluginGroups/>
    7. <servers/>
    8. <mirrors/>
    9. <proxies/>
    10. <profiles/>
    11. <activeProfiles/>
    12. </settings>

    settings.xml文件读取放到${user.home}/.m2/settings.xml位置。

    自己新建settings.xml放到${user.home}/.m2/settings.xml位置。配置settings.xml文件通过localRepository设置本地仓库的路径

    1. <settings>
    2. <localRepository>D:\repo</localRepository>
    3. </settings>

    再来执行mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1命令,把仓库创建到D:\repo路径下。

    1. C:\Users\Administrator>mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1
    2. [INFO] Scanning for projects...
    3. Downloading from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
    4. ..........
    5. Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.13.3/log4j-core-2.13.3.jar (1.7 MB at 305 kB/s)
    6. Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/net/bytebuddy/byte-buddy/1.10.19/byte-buddy-1.10.19.jar (3.5 MB at 775 kB/s)
    7. [INFO] ------------------------------------------------------------------------
    8. [INFO] BUILD SUCCESS
    9. [INFO] ------------------------------------------------------------------------
    10. [INFO] Total time: 01:24 min
    11. [INFO] Finished at: 2022-09-28T22:37:00+08:00
    12. [INFO] ------------------------------------------------------------------------
    13. C:\Users\Administrator>

    Nexus配置Maven私服

    通过profiles可以自定义配置信息,比如可以自定义远程仓库,默认用的是Maven中央仓库,我们可以自定义国内的仓库,或者自己的私服。

    1. <settings>
    2. <localRepository>D:\repo</localRepository>
    3. <profiles>
    4. <profile>
    5. <id>nexus</id>
    6. <repositories>
    7. <repository>
    8. <id>nexus</id>
    9. <name>Nexus</name>
    10. <url>http://localhost:8081/repository/maven-public/</url>
    11. <releases>
    12. <enabled>true</enabled>
    13. <updatePolicy>always</updatePolicy>
    14. </releases>
    15. <snapshots>
    16. <enabled>true</enabled>
    17. <updatePolicy>always</updatePolicy>
    18. <checksumPolicy>warn</checksumPolicy>
    19. </snapshots>
    20. </repository>
    21. </repositories>
    22. <pluginRepositories>
    23. <pluginRepository>
    24. <id>nexus</id>
    25. <name>Nexus</name>
    26. <url>http://localhost:8081/repository/maven-public/</url>
    27. <releases>
    28. <enabled>true</enabled>
    29. <updatePolicy>always</updatePolicy>
    30. </releases>
    31. <snapshots>
    32. <enabled>true</enabled>
    33. <updatePolicy>always</updatePolicy>
    34. <checksumPolicy>warn</checksumPolicy>
    35. </snapshots>
    36. </pluginRepository>
    37. </pluginRepositories>
    38. </profile>
    39. </profiles>
    40. <activeProfiles>
    41. <activeProfile>nexus</activeProfile>
    42. </activeProfiles>
    43. </settings>

    解释:

            repositories:仓库

            pluginRepositories:插件仓库

            activeProfiles:用来激活自定义的配置

    这样,我们就在Maven项目中用上了自己的私服。

    测试:

            先把本地D:\repo路径下的仓库删掉,再执行mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1命令。

    1. C:\Users\Administrator>mvn dependency:get -Dartifact=redis.clients:jedis:3.6.1
    2. [INFO] Scanning for projects...
    3. Downloading from nexus: http://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
    4. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (3.9 kB at 1.5 kB/s)
    5. Downloading from nexus: http://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom
    6. ......
    7. Downloading from nexus: http://localhost:8081/repository/maven-public/org/objenesis/objenesis/3.1/objenesis-3.1.jar
    8. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar (292 kB at 86 kB/s)
    9. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/objenesis/objenesis/3.1/objenesis-3.1.jar (60 kB at 141 kB/s)
    10. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/apache/logging/log4j/log4j-core/2.13.3/log4j-core-2.13.3.jar (1.7 MB at 320 kB/s)
    11. Downloaded from nexus: http://localhost:8081/repository/maven-public/junit/junit/4.13.1/junit-4.13.1.jar (383 kB at 44 kB/s)
    12. Downloaded from nexus: http://localhost:8081/repository/maven-public/net/bytebuddy/byte-buddy/1.10.19/byte-buddy-1.10.19.jar (3.5 MB at 23 kB/s)
    13. [INFO] ------------------------------------------------------------------------
    14. [INFO] BUILD SUCCESS
    15. [INFO] ------------------------------------------------------------------------
    16. [INFO] Total time: 05:54 min
    17. [INFO] Finished at: 2022-09-28T23:01:48+08:00
    18. [INFO] ------------------------------------------------------------------------
    19. C:\Users\Administrator>

    在Nexus网址

     点击maven-public,可以看到下载到本地私服的依赖。

     先在私服中查找构件,如果私服中没有,就会从远程仓库中进行下载,先下载到私服,再从私服下载到本地仓库。

    5、添加国内的仓库镜像

    这里以添加阿里云Maven镜像为例,阿里云Maven仓库配置指南

    打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ),在标签中添加 mirror 子节点:

    1. <mirror>
    2. <id>aliyunmaven</id>
    3. <mirrorOf>*</mirrorOf>
    4. <name>阿里云公共仓库</name>
    5. <url>https://maven.aliyun.com/repository/public</url>
    6. </mirror>

    由于我们自己搭建了私服。我们就不修改settings.xml 配置文件,而是在私服中进行配置。

     1、Repository--> Repositories-->Create  repository

    2、选择maven2代理库 

    3、 完善名称和阿里云仓库下载地址,划到最后点击创建

     4、创建完成可以看到刚创建成功的maven-aliyun,点击maven-public组,把maven-aliyun添加进组中,并把maven-aliyun顺序调到中央仓库前

     

     5、配置完成,验证一下

    mvn dependency:get -Dartifact=org.apache.dubbo:dubbo:3.0.1
    1. C:\Users\Administrator>mvn dependency:get -Dartifact=org.apache.dubbo:dubbo:3.0.1
    2. [INFO] Scanning for projects...
    3. [INFO]
    4. [INFO] ------------------< org.apache.maven:standalone-pom >-------------------
    5. [INFO] Building Maven Stub Project (No POM) 1
    6. [INFO] --------------------------------[ pom ]---------------------------------
    7. [INFO]
    8. [INFO] --- maven-dependency-plugin:2.8:get (default-cli) @ standalone-pom ---
    9. [INFO] Resolving org.apache.dubbo:dubbo:jar:3.0.1 with transitive dependencies
    10. Downloading from nexus: http://localhost:8081/repository/maven-public/org/apache/dubbo/dubbo/3.0.1/dubbo-3.0.1.pom
    11. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/apache/dubbo/dubbo/3.0.1/dubbo-3.0.1.pom (35 kB at 55 kB/s)
    12. Downloading from nexus: http://localhost:8081/repository/maven-public/org/apache/dubbo/dubbo-parent/3.0.1/dubbo-parent-3.0.1.pom
    13. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/apache/dubbo/dubbo-parent/3.0.1/dubbo-parent-3.0.1.pom (28 kB at 69 kB/s)
    14. ........
    15. Downloaded from nexus: http://localhost:8081/repository/maven-public/net/bytebuddy/byte-buddy-agent/1.10.20/byte-buddy-agent-1.10.20.jar (259 kB at 565 kB/s)
    16. Downloaded from nexus: http://localhost:8081/repository/maven-public/io/netty/netty-all/4.1.56.Final/netty-all-4.1.56.Final.jar (4.3 MB at 751 kB/s)
    17. Downloaded from nexus: http://localhost:8081/repository/maven-public/net/bytebuddy/byte-buddy/1.10.20/byte-buddy-1.10.20.jar (3.5 MB at 1.5 MB/s)
    18. Downloaded from nexus: http://localhost:8081/repository/maven-public/org/eclipse/collections/eclipse-collections/10.4.0/eclipse-collections-10.4.0.jar (10 MB at 1.4 MB/s)
    19. [INFO] ------------------------------------------------------------------------
    20. [INFO] BUILD SUCCESS
    21. [INFO] ------------------------------------------------------------------------
    22. [INFO] Total time: 24.282 s
    23. [INFO] Finished at: 2022-09-28T23:35:37+08:00
    24. [INFO] ------------------------------------------------------------------------
    25. C:\Users\Administrator>

    在Nexus网址

     点击maven-aliyun,可以看到下载到本地私服的依赖。验证成功。

    天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

  • 相关阅读:
    C++多态(2)
    视频倒放怎么制作?快来学会这几个简单的方法
    前端培训栈和堆有什么区别
    springboot+vue基于java的网上图书商城系统含卖家功能
    【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard
    设计模式|组合模式(Composite Pattern)
    日常Bug排查-偶发性读数据不一致
    基于jsp+Spring boot+mybatis的图书管理系统设计和实现
    Leetcode-1653. 使字符串平衡的最少删除次数
    [山东科技大学OJ]2676 Problem G: 数字统计二
  • 原文地址:https://blog.csdn.net/weixin_42472027/article/details/127097360