Nexus搭建Maven私服

 

一. 私服搭建及配置

1 . 私服简介

  项目开发时,一般采用Maven来进行项目构建,管理,jar包下载,项目组开发人员开发时,只要在项目的pom.xml文件中,添加如下pom.xml信息从公共的库中下载相关的Jar包以及依赖Jar包,但有时候公共的库不是那么稳定而且下载速度往往很慢,一个团队一起开发项目时,如果每个组员都去下载一遍所有依赖的Jar包,其实是一件很麻烦的事情,所以这时候就有必要搭建一个Maven的私服了。私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 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属性值就可以了。

 

 3 . Nexus预置的仓库

 3.1  类型介绍

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

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

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

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

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

    

 

              

 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文件中:

  

 

 

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

  

 

  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完全忽略校验和错误。

 

   3.  配置仓库镜像

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

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

  修改Maven的Settings文件:

  

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

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

 

   4.  上传第三方jar包

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

  Jar 包上传成功后,切换到 Browse Index 选项卡页面,点击刷新按钮,可以看到我们刚刚上传的 Jar 包,选中 Jar 包我们可以在右边看到 Jar 包对应的 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按钮如下图:

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

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

  2. 搜索仓库jar包

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

 

四. jar包推送至私有仓库

1、首先maven下settings文件私服认证配置

<servers>
    <server>
      <id>nexus-repository</id>
      <username>admin</username>
      <password>admin</password>
    </server>
</servers>

2、应用下pom文件私服配置

    <distributionManagement>
        <repository>
            <id>nexus-repository</id>
            <name>Local Release Repository</name>
            <url>http://172.xxx.xxx.60:8087/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-repository</id>
            <name>Local Snapshots Repository</name>
            <url>http://172.xxx.xxx.60:8087/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

3、注意

  • setting 文件 server 中的 id 和项目 pom 文件中的 id 一致,server中设置准确的username 和 password,在 deploy 的时候,maven会通过 username 和 password 认证,认证通过,就会将本地 maven 项目生成的 jar 包上传到私服上。
  • 检查是否允许重新发布上传:Deployment Policy设置为Allow Redeploy而不是Disable Redeploy。

Deployment Policy设置为Disable Redeploy重复部署会报:Return code is: 400, ReasonPhrase: Bad Request

 

五. 遗留问题

  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

posted on 2019-03-13 15:31  曹伟雄  阅读(1136)  评论(0编辑  收藏  举报

导航