一. 私服搭建及配置

1 . 私服简介

  项目开发时,一般采用Maven来进行项目构建,管理,jar包下载,项目组开发人员开发时,只要在项目的pom.xml文件中,添加如下pom.xml信息从公共的库中下载相关的Jar包以及依赖Jar包,但有时候公共的库不是那么稳定而且下载速度往往很慢,一个团队一起开发项目时,如果每个组员都去下载一遍所有依赖的Jar包,其实是一件很麻烦的事情,所以这时候就有必要搭建一个Maven的私服了。私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

Nexus搭建Maven私服

 

2 . 安装Nexus

2 . 1 . 下载Nexus

  Nexus 专业版是需要付费的,这里我们下载开源版 Nexus OSS。下载地址:http://www.sonatype.org/nexus/go,最新的为OSS3.X,我这里选择稳定版本2.x,点击后自动下载

本文使用的 Nexus 版本为 Nexus Repository Manager OSS 2.x ,之所以不使用最新的 Nexus Repository Manager OSS 3 是因为个人感觉版本3还没有版本2友好,特别是在图形管理界面的操作上。

 

2 . 2 . 安装部署Nexus

  Linux版本无需安装,用以下命令直接解压即可,Nexus的官方文档建议解压安装到 /usr/local下面

tar -zxvf nexus-2.14.2-01-bundle.tar.gz

  生成两个目录:

nexus-2.14.2-01
sonatype-work

  Nexus私服会通过Maven中央仓库下载一些需要的构件:

默认路径:{Nexus目录}\sonatype-work\nexus\storage

中央仓库:{nexus-work}\storage\central
第三方仓库:{nexus-work}\storage\thirdparty
发布仓库:{nexus-work}\storage\releases

注:public组是自定义仓库的集合,其路径下不存放具体的Jar包构件。

 

2 . 3 . 运行Nexus

  如果你当前用户是root,那么在你运行之前vi bin/nexus文件前几行设置一下:RUN_AS_USER=root

  然后进入bin目录下,启动服务

./nexus start    启动服务
./nexus stop     停止服務 ./nexus restart   重启服务

 

2 . 4 . 打开Nexus

  打开浏览器,访问:http://localhost:8081/nexus/,点Sign In登录管理页面,用户名密码为,admin和admin123,如下如所示,在Repositories页面里显示着,默认已经创建了5个仓库,直接可以拿来用,无需再自行创建仓库。

8081为默认的端口号,要修改端口号可进入\conf\打开nexus.properties文件,修改application-port属性值就可以了。

Nexus搭建Maven私服

 

 3 . Nexus预置的仓库

 3.1  类型介绍

    登陆Nexus,在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository。

    这里简单介绍下几种repository的类型:

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

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

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

    Nexus搭建Maven私服Nexus搭建Maven私服

 

              Nexus搭建Maven私服

 3.2  管理本地仓库

    我们前面讲到类型为hosted的为本地仓库,Nexus预置了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:

  Releases:

     这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.

  Snapshots:

     这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.

  3rd Party:

    顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。

 

二. 利用搭建的私服,进行下载及上传jar包

    1. 远程仓库的认证

  Nexus 安装成功后,接下来需要修改 Maven 的配置文件(settings.xml),整合 Nexus。

大部分公共的远程仓库无须认证就可以直接访问,但我们在平时的开发中往往会架设自己的Maven远程仓库,出于安全方面的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以配置在Maven的settings.xml文件中,也可直接在项目的pom.xml中配置,后面会分别举例说明,但是认证信息必须配置在Maven的settings.xml文件中。在settings.xml中配置认证信息更为安全。如下:在settings.xml中配置<servers>节点:

 1 <settings>
 2  2     ...
 3  3     <!--配置远程仓库认证信息-->
 4  4     <servers>
 5  5         <server>
 6  6             <id>bbsnexus</id>
 7  7             <username>admin</username>
 8  8             <password>admin123</password>
 9  9         </server>
10 10     </servers>
11 11     ...
12 12 </settings>

上面代码我们配置了一个id为bbsnexus的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。认证用户名为admin,认证密码为admin123。

这里的关键是id元素,id没有要求,随便定义,但是后面配置远程仓库的id必须和这里的id保持一致。正是这个id将认证信息与仓库配置联系在了一起。

   2.  配置远程仓库

        如果只有一个项目,可以配置在项目的pom文件中:

  Nexus搭建Maven私服

 

 

  如果有多个项目时,可以将如上配置放到Maven的Settings文件中:

  Nexus搭建Maven私服

 

  repository:在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。

  id:仓库声明的唯一id,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库声明也使用该id,就会覆盖中央仓库的配置。

  name:仓库的名称,让我们直观方便的知道仓库是哪个,暂时没发现其他太大的含义。

  url:指向了仓库的地址,一般来说,该地址都基于http协议,Maven用户都可以在浏览器中打开仓库地址浏览构件。

  releases和snapshots:用来控制Maven对于发布版构件和快照版构件的下载权限。需要注意的是enabled子元素,该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下

       载支持。根据该配置,Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。

  layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到Maven1的布局。

  其他:对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。

  元素updatePolicy用来配置Maven从远处仓库检查更新的频率,默认值是daily,表示Maven每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。

  元素checksumPolicy用来配置Maven检查校验和文件的策略。当构建被部署到Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,当checksumPolicy的值为默认的warn时,Maven会在执行构建时

       输出警告信息,其他可用的值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。

 

  默认的,如果本地仓库找不到依赖的构件,这时需要东西时先到Nexus上找,如果发现Nexus服务关闭后,会自动到中央仓库找。

  如果我们想覆盖中央仓库的默认地址,强制依赖的东西都到Nexus中去找,即使Nexus关闭也不会到中央工厂去下载:

  修改Maven的Settings文件:

  Nexus搭建Maven私服

  至此,我们已经可以从自己搭建的私服下载jar了。先删除Maven本地仓库中的所有jar包,然后用IDE打开Maven项目,刷新一下Maven,然后看看本地仓库中是否有jar包,如果有说明下载成功。

同时可以登录 nexus 的 admin 账号可以看到 Public Repositories  下出现了一些 Jar 包。

Nexus搭建Maven私服

 

   4.  上传第三方jar包

  假如我们开发了一些自己的Jar供大家一起使用,就需要上传该jar包。选中宿主库——3rd party,之后选择Artifact Upload上传至宿主空间。

Nexus搭建Maven私服

Nexus搭建Maven私服

Nexus搭建Maven私服

Nexus搭建Maven私服

  Jar 包上传成功后,切换到 Browse Index 选项卡页面,点击刷新按钮,可以看到我们刚刚上传的 Jar 包,选中 Jar 包我们可以在右边看到 Jar 包对应的 Maven 依赖信息,可以用于项目的构建。

Nexus搭建Maven私服

  进入本地仓库删除 \.m2\org\jboss\cache\jbosscache-core\3.2.1.GA 目录下的所有文件(重要,否则会构建失败),此时,再次回到刚刚构建失败的项目,刷新 Maven,可以看到项目已经可以正常构建了。

 

三. 配置Nexus【可选】

  1. 开启远程索引

    新搭建的neuxs环境只是一个空的仓库,需要手动和远程中心库进行同步,nexus默认是关闭远程索引下载,最重要的一件事情就是开启远程索引下载,点击左边Administration菜单下面的Repositories,找到右边仓库列表中的仓库Central,然后把仓库的configuration下把Download Remote Indexes修改为true,操作完后记得点击下面的save按钮如下图:

Nexus搭建Maven私服

  然后在仓库上分别右键,选择Repari Index,这样Nexus就会去下载远程的索引文件。

Nexus搭建Maven私服

默认是从中央仓库中下载jar包,但有时候中央仓库下载很慢,经常下载不下来,所有有时候需要修改远程仓库的地址,可以改成jboss仓库https://repository.jboss.org/nexus/content/groups/public/,还可以改成http://maven.aliyun.com/nexus/content/groups/public/,后面这个库速度很快,不错。

Nexus搭建Maven私服

  2. 搜索仓库jar包

在左边菜单栏里面有个Artifact Search, 在输入框里面输入你想要搜索的构件名字,比如:spring, 那么查询结果如下:右下角就是这个Jar包的POM坐标信息

Nexus搭建Maven私服

 

 

四. 遗留问题

  1、关于Central 和 Apache Snapshots  仓库无法拉取的问题:nexus默认配置的是如下路径:http://repository.apache.org/snapshots/

然后更新索引的时候日志中会提示:jvm 1    | 2013-11-02 19:23:34 INFO  [pxpool-1-thread-3] admin org.sonatype.nexus.index.DefaultIndexerManager - Cannot fetch remote index for repository "Apache Snapshots" [id=apache-snapshots] as it does not publish indexes.

正确的地址是如下这个:
https://repository.apache.org/content/repositories/releases/         release版本
https://repository.apache.org/content/repositories/snapshots/      非稳定版本

将地址改为上面的其中一个,可以拉取包下来,但是包很少,不能用。用阿里云(http://maven.aliyun.com/nexus/content/groups/public/)的也不行,我现在是手工放上去的。

   

 

常用的软件仓库:

  http://maven.aliyun.com/nexus/content/groups/public(阿里云,推荐)

  http://mvnrepository.com

  http://www.sonatype.org/nexus

  http://repo1.maven.org/maven2

  http://repo2.maven.org/maven2/

  https://repository.jboss.org/nexus/content/groups/public/

 

参考文章:

  https://www.cnblogs.com/tyhj-zxp/p/7605879.html

       https://www.cnblogs.com/dengyulinBlog/p/6398310.html

  https://www.cnblogs.com/rexfang/p/7625696.html

       https://blog.csdn.net/zzq900503/article/details/41743351

相关文章:

  • 2021-04-08
  • 2021-12-18
  • 2022-03-09
  • 2022-12-23
  • 2022-01-04
猜你喜欢
  • 2022-01-05
  • 2021-06-10
  • 2021-04-27
  • 2021-06-25
  • 2021-05-25
  • 2022-01-19
  • 2021-06-16
  • 2021-11-11
相关资源
相似解决方案