zoukankan      html  css  js  c++  java
  • 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
    exusstorage
    
    中央仓库:{nexus-work}storagecentral
    第三方仓库:{nexus-work}storage	hirdparty
    发布仓库:{nexus-work}storage
    eleases
    
    注: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 依赖信息,可以用于项目的构建。

      进入本地仓库删除 .m2orgjbosscachejbosscache-core3.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坐标信息

    四. 遗留问题

      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

  • 相关阅读:
    C#代码动态编译、动态执行、动态调试
    php’s explode() 函数
    exec函数族
    在C语言中执行shell命令
    dmesg简介
    错误输出
    php’s json_decode函数
    使expect脚本传回返回值
    php’s fgets() 函数
    统计当前目录下的所有文件目录大小,不显示子目录与子文件
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/10522400.html
Copyright © 2011-2022 走看看