Nexus搭建Maven私服并使用私服

4,094 阅读7分钟

简单介绍

前言:我们常用的maven仓库有中央仓库(全球共用),私有仓库(公司内部共用),和本地仓库(个人私有).类似代码托管大概有GitHub(全球代码托管)和gitee(国内版代码托管)和Gitlab(公司私有代码托管),所有一般公司要内部搭建的往往就是内部代码托管(Gitlab)和内部jar包托管(nexus私服),这里演示的主要是nexus私服的搭建,主要目的是学习并可以模拟maven上传自己的jar包到公司开发流程.

中途遇到困难结合百度,这里提供一些解决方案,仅供参考(blog.csdn.net/qq_34531925…)

私服的搭建

安装私服软件nexus

前提本地JDK和maven都是安装好了的

首先安装或者搭建服务器自然需要软件的,那么nexus软件下载地址:    www.sonatype.org/nexus/go

版本以nexus 3.28.1-01为例 当然是2020年10月24号最新版

然后填写你的邮件(比如你的QQ邮箱)

 下载软件

 下载完成后直接解压到你需要的安装的文件夹(比如我的是D:\Asoftware\package\nexus)就行了,并配置环境变量

CMD启动即可  nexus /run  

等待启动成功

测试本地访问是否可以正常运行 

首次访问  http://localhost:8081/

点击右上角登录(弹框提示用户名是admin 密码在对应的文件夹,按照要求填写即可)

 后续步骤提示可以重置密码(我直接习惯把密码也改成admin,这样方便一点)注意修改了后要记住它哦,原始密码文件会在你修改后自动删除  正常登录后的界面

将nexus配置为系统服务,新开一个CMD窗口 命令  nexus.exe /install nexus  (Could not open SCManager.是因为没有使用管理员CMD窗口)  查看一下Windows任务管理器,确认一下(已停止不用在意,继续下一步)

nexus软件目录介绍

如图所示

安装目录下大致介绍

bin 包含nexus的启动脚本和相关配置
etc jetty、karaf等配置文件
jre jre环境
lib java架包库
public 关于nexus应用在本地跑起来所需要的资源
system 应用所有的插件和组件
LICENSE.txt 和 NOTICE.txt 版权声明和法律细则

 数据文档目录大致介绍

blobs/ 创建blob的默认路径,当然也可以重新指定
cache/ 当前缓存的karaf包的信息
db/ OrientDB数据库的数据,用于存储nexus的元数据的数据库
elasticsearch/ 当前配置的Elasticsearch状态
etc/ 大概是运行时配置状态和关于资源库的自定义的相关的东西
health-check/ 看目录,健康检查的相关报告的存储目录吧
keystores/ 自动生成的关于资源库的ID主键
log/ 运行实例生成的日志文件,也有日志文件的压缩包,貌似是每天都会生成日志文件,你可以定期删除老的日志文件
tmp/ 用于存储临时文件的目录

nexus基本配置

修改软件端口号

 nexus对maven仓库的配置

创建 Blob Strores(可以不用配置)

在创建 repository之前,还是需要先设定一个指定的文件存储目录,便于统一管理。在创建 repository之前,还是需要先设定一个指定的文件存储目录,便于统一管理。这一步非必须

配置 Proxy Repository代理仓库

创建 Proxy Repository 代理仓库,创建 repository 创建成功后,之后打包的jar文件会在这个指定的路径下.

 

创建页面出来之后,页面上有三个框是必填的:

 下图的一般选Mixed(包含SNAPSHOT版本和RELEASE版本),也可以根据你的需要

 创建 hosted repository 宿主仓库

就是私服jar包放在电脑的那个位置(公司的话肯定是云服务器,这里模拟放在本机就行)

Hosted有三种方式:ReleasesSnapshotMixed(和上面类似)

  • Releases: 一般是已经发布的Jar包
  • Snapshot: 未发布的版本
  • Mixed:混合的

这个就是多几个备胎的意思,jar包在私服下载不了,可以直接选择其他镜像,下载jar包,和maven的setting配置镜像一个道理.

这里推荐几个远程仓库

 

 

创建 group repository 仓库组

类似于把仓库都作为备胎,按照顺序依次使用

大概解释一下 为什么要注意顺序

官方文档中建议:
It is recommended practice to place hosted repositories higher in the list than proxy repositories. For proxy repositories, the repository manager needs to check the remote repository which will incur more overhead than a hosted repository lookup.

希望将hosted repositories【宿主仓库】的顺序放在proxy repositories【代理仓库】之前,因为一个group【仓库组】中可以涵括这些宿主仓库和代理仓库。而一整个的group是作为一个public,一个接口给别人使用的。

所以当查找jar包的时候,如果代理资源库在前面,那就是先从远程去查找jar,而不是先从宿主仓库(本地仓库)去查找是否有jar

测试 让 Maven 项目使用 Nexus 私服

idea设置 Nexus 为镜像地址

maven 下的setting.xml文件和你自己项目中的pom.xml文件的关系:

  • settting.xml 文件就是本地电脑上的全局变量;而pom.xml文件就是局部变量。
  • pom.xml文件对于项目来说,是优先使用的。然而pom.xml文件中如果没有指定jar要从哪里下载的话,也就是说没有配置镜像地址的话,当然只能去按照settting.xml 中定义的地址去找了

http://localhost:9081/repository/myself_group/

 配置maven的配置文件setting.xml

<!--自定义maven本地仓库地址(注意斜杆的方向哈)-->
<localRepository>D:/Aworkspace/mavennexus/nexusrepo</localRepository>


<!--nexus服务器(注意位置servers内)-->

  <server>  
        <id>nexus</id>  
        <username>admin</username>  
        <password>admin</password>  
  </server> 

  <server>  
      <id>nexus-releases</id>  
      <username>admin</username>  
     <password>admin</password>  
  </server> 
 
  <server>  
      <id>nexus-snapshots</id>  
      <username>admin</username>  
     <password>admin</password>  
  </server> 

<!--仓库组的url地址  id和name自定义,mirrorOf的值设置为central,写死的-->  
  <mirrors>     
    <mirror>  
        <id>nexus</id>  
        <name>nexus repository</name>  
        <url>http://localhost:9081/repository/myself_group/</url>  
        <mirrorOf>central</mirrorOf>  
    </mirror>     
  </mirrors>

 

idea搭建maven测试

(先随便创建一个maven项目,里面象征性写个实体类user)   查看pom配置的路径url

  pom(注意里面配置的内容来源)注意要打包源码需要添加插件,否则下载源码的时候会出现

idea下载nexus私服仓库jar包源码失败.所以这里根据需要,一般还是选择待源码发布,不然人间下载你的jar包失败,读源码不爽

 <distributionManagement>
        <repository>
            <id>nexus-Release</id>
            <name>Nexus Release Repository</name>
            <url>http://localhost:9081/nexus/content/repositories/Release/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-SNAPSHOT</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://localhost:9081/nexus/content/repositories/SNAPSHOT/</url>
        </snapshotRepository>
 </distributionManagement>

 <build>
        <plugins>
            <!--   要将源码放上去,需要加入此配置    -->
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 私服的增删改查(CRUD)

 上传jar到nexus私服-新增

 到配置的私服仓库查看一下

在私服控制台上再次确认一下  可以根据 artifactId 搜索 zxx-nexus  (我的测试maven的artifactId )

 到这里,基本上完成了所有的私服的搭建配置和maven项目结合,实现了一个完整的私服仓库(拉取私服jar不用展示了,因为没有什么不一样,和之前的maven逻辑一样,只是本地找不到jar包,之前是直接去中央仓库下载,现在只是maven先去私服看一下,没有再去中央仓库,所以这个是maven配置settings文件后自动做的,使用者不用去管哪些了).

nexus私服查看jar详情-查找

idea的maven项目在nexus私服下载jar

只需要在pom.xml添加相应的jar做表即可

 测试使用

 尝试下载jar源码(注意这个是在打包的时候配置了源码打包才行哈,就是那个pom配置了插件才行,不然无法下载jar包源码以为是私服授权或者其他哪里配置不对,其实不是,当然还是再次提醒setting文件要配置正确哈)

 

nexus私服jar包的删除-删除

上一步进入详情后,点击那个browse SNAPSHOT(s)后,进入

 nexus私服jar包的修改

其实就是上传的时候升级版本号即可,并没有所谓的修改jar包,要修改GAV坐标,直接上传就行了,如果之前的坐标有改动,直接删除原坐标,新上传即可,这个只是为了强迫症完成增删改查的完整性

 处理上传jar包到私服的细节问题

升级jar包版本,并上传到私服

修改了代码之后,必须新增版本号(哪怕只是添加一段注释,养成习惯),这个不存在jar包冲突的过程.(只有分布式开发的时候用户使用的jar版本不一致会导致jar包类,接口等代码不一致,这个不是maven私服的锅),遇到这种情况,需要大家讨论后选择对应版本的jar包即可