8,使用Nexus创建私服

一. Nexus简介

    Nexus 分为开源版和企业版,开源版基于 GPLv3 许可证。开源版本主要特性有:

        1较小的内存占用(最少为 28MB 

        2基于 ExJS 的友好界面

        3基于 Restlet 的完全 REST API

        4支持代理仓库、宿主仓库和仓库组

        5基于文件系统,不需要数据库

        6支持仓库索引和搜索

        7支持从界面上传 Maven 构件

        8细粒度的安全控制。

二. 安装Nexus

1. 下载Nexus

      Nexus 的下载地址是: http://nexus.sonatype.org/downloads/

    有两种安装包:一种是自带 jetty 容器的 Bundle包,另一种是不带 web 容器的 war 包。

2. Bundle方式安装

      Bundle 包安装目录下会有两个目录: nexus-webapp-x.x.x 包含了 Nexus 运行所需的文件。 sonatype-work 下包含Nexus 生成的配置文件、日志文件、仓库文件等。

    如需要改变端口,可以修改 nexus-webapp-x.x.x/conf/plexus.properties 文件中的application-port 属性即可。

3. 启动nexus

    找到nexus安装目录的如:D:\user\local\nexus\nexus-2.0.6\bin\jsw\windows-x86-32文件夹,点击install-nexus.bat安装nexus,然后点击start-nexus.bat启动nexus。

4. WAR方式安装

5. 登录Nexus

    Nexus 默认访问地址是: http://localhost:8081/nexus 

      默认的管理员用户名:admin,密码:admin123

三. Nexus的仓库与仓库组

1. 概述

      Nexus 的仓库类型有四种: group (仓库组)、 hosted (宿主)、 proxy (代理)和 virtual (虚拟)。

    仓库组没有具体的内容,它会转向其包含的宿主仓库或代理仓库获得实际构件的内容。

    宿主仓库主要是用来存放一些组织内部的构件,或由于版权原因不能放在公共 Maven 仓库中的构件的。

    代理仓库则是用来代理远程仓库,它会从远程仓库下载并缓存构件。

    虚拟仓库用于 maven1 格式的仓库,会动态地将仓库内容格式进行转换。

2. Nexus内置的仓库

    Nexus 内置了如下仓库:

        1Maven Central :代理 Maven 的中央仓库,策略为 release

        2Releases :策略为 Release 的宿主类仓库,用来部署组织内部的 release 版本构件

        3Snapshots :策略为 Snapshot 的宿主类仓库,用来部署组织内部的 release 版本构件

        43rd party :策略为 Release 的宿主类仓库,用来部署无法从公共仓库获得的第三方 release 版构件。

        5Apache Snapshots :代理 Apache Maven 仓库,策略为 Snapshot

        6Codehaus Snapshots :代理 Codehaus Maven 仓库,策略为 Snapshot

        7Google Code :代理 Google Code Maven 仓库,策略为 Release

        8Java.net Maven 2 :代理 Java.net Maven 仓库,策略为 Release

        9Public Repositories :将上述策略为 Release 的仓库聚合并通过一致的地址提供服务。

        10Public Snapshot Repositories :将上述策略为 Snapshot 的仓库聚合并通过一致的地址提供服务。

3. Nexus仓库分类的概念

4. 创建Nexus宿主仓库

    单击页面左边导航栏中的Repositories链接,在右边的面板中选择Add,接着在下拉菜单中选择Hosted Repository,就可以打开添加宿主仓库配置页面。填入仓库的ID和名称,Repostory Type表示仓库类型,Provider用来确定仓库的格式。一般选择默认的Maven2 Repository。Repository Policy配置仓库是发布版构建仓库还是快照版构建仓库。

5. 创建Nexus代理仓库

    与宿主仓库类似。

6. 创建Nexus仓库组

    仓库组没有 Release  Snapshot 的区别

四. Nexus的索引与构建搜索

      Nexus 通过维护仓库的索引来提供搜索功能。为了能搜索 Maven 中央仓库,需要设置 Nexus 中的 Maven Central代理仓库下载远程索引,默认这个设置是关闭的。

    只要远程仓库提供 nexus-indexer 形式的索引, Nexus 就可以下载它的索引,同时 Nexus 也可以对宿主仓库和代理仓库进行索引。仓库有了索引之后,可以在其 Browse Index 选项卡中浏览仓库内容的树形结构。

      Nexus 提供了关键字搜索、 GAV 搜索、类名搜索和校验和搜索。

    为宿主仓库和代理仓库建立索引,只需要在仓库上右击,选择ReIndex即可。

五. 配置MavenNexus下载构建

    我们可以在 settings.xml 中配置 Maven 私服,这样就可以对本机的所有 Maven 项目有效。但是 settings.xml 中没有 Repositories  pluginRepositories 。但可以设置如下信息:

<profiles>  
   <profile>  
     <id>nexus</id>  
     <repositories>  
       <repository>  
         <id>nexus</id>  
         <name>Nexus</name>  
         <url>http://localhost:8081/nexus/content/groups/public/</url>  
         <releases><enabled>true</enabled></releases>  
         <snapshots><enabled>true</enabled></snapshots>  
       </repository>  
     </repositories>  
     <pluginRepositories>  
       <pluginRepository>  
         <id>nexus</id>  
         <name>Nexus</name>  
         <url>http://localhost:8081/nexus/content/groups/public/</url>  
         <releases><enabled>true</enabled></releases>  
         <snapshots><enabled>true</enabled></snapshots>  
       <pluginRepository>
     </pluginRepositories>  
   </profile>  
</profiles>  
<activeProfiles>  
    <activeProfile>nexus</activeProfile>  
</activeProfiles>

    配置中的activeProfile元素是将nexus这个profile激活。这样当执行maven构建的时候,激活的profile会将仓库配置应用到项目。

    同时我们可以 settings.xml 中将 Maven 私服设为所有远程仓库的镜像,这样就能让所有 Maven 下载请求都仅仅通过 Nexus 

<mirrors>  
   <mirror>  
     <id>nexus</id>  
     <mirrorOf>*</mirrorOf>  
     <url>http://localhost:8081/nexus/content/groups/public</url>  
   </mirror>  
</mirrors>

    可以在 settings.xml 中的 profile 元素中添加以下元素:

<repositories>  
      <repository>  
         <id>central</id>  
         <url>http://central</url>  
         <releases><enabled>true</enabled></releases>  
         <snapshots><enabled>true</enabled></snapshots>  
     </repository>  
</repositories>  
<pluginRepositories>  
     <pluginRepository>  
         <id>central</id>  
         <url>http://central</url>  
         <releases><enabled>true</enabled></releases>  
         <snapshots><enabled>true</enabled></snapshots>  
     </pluginRepository>  
</pluginRepositories>

    仓库及插件仓库的 id  central ,覆盖了超级 POM 中央仓库的配置它们的 url 已无关紧要,因为所有请求都会通过镜像访问私服地址。这样配置的主要目的是开放对 snapshot 版本下载的支持。

    其实只要项目配置中有一个依赖仓库开放了 snapshot 策略就行。而且如果私服仓库组中的仓库不支持snapshot 也没用。

六. 部署构建至Nexus

1. 使用Maven部署构建至Nexus

    可以在 POM 中设置构件发布到哪个远程仓库,将这个仓库设置成 Nexus 私服:

<distributionManagement>  
   <repository>  
     <id>nexus-releases</id>  
     <name>Nexus Releases Repository</name>  
     <url>http://localhost:8081/nexus/content/repositories/releases/</url>  
   </repository>  
   <snapshotRepository>  
     <id>nexus-snapshots</id>  
     <name>Nexus Snapshots Repository</name>  
     <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>  
   </snapshotRepository>  
</distributionManagement>

    同时在 settings 中的配置 Nexus 的认证信息:

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

      Nexus 也支持在 repository  Artifact Upload 选项卡中手动上传构件。

2. 手动部署第三方构建至Nexus

    某些jar文件(如oracle的jdbc驱动),由于许可证或小型开源项目等因素无法公开放在公共仓库中,也没有维护自己的仓库,那么久需要将这类构建手动下载到本地,然后通过Nexus的界面上传到私服中。

    要上传第三方构建,首先要选择一个宿主仓库如3rd party,然后在页面的下方选择Artifact upload选项卡。在上传的时候,Nexus要求用户确定其maven的坐标,如果该构建是通过maven构建的,可以在GAV Definition下拉列表选择From POM,否则就选GAV Parameters

        Nexus允许用户一次上传一个主构件和多个附属构建(即Classifier)。

七. Nexus的权限管理

1. Nexus的访问控制模型

    一个 Nexus 用户可以被赋予一个或多个角色,一个角色可以包含一个或多个权限,也可以包含一个或多个其他角色。

    管理员必须以角色的方式将权限赋予Nexus用户。

      Nexus 预定义了三个用户:

        1admin:对 Nexus 服务的完全控制权限,默认密码为 admin123

        2deployment:能够访问 Nexus ,浏览仓库内容,搜索并且上传部署构件但无法配置 Nexus ,默认密码为:deployment123

        3anonymous:对应所有未登录用户,可以浏览和搜索仓库

2. 为项目分配独立的仓库

    我们可以为不同的实际项目配置不同的宿主仓库,并为这些宿主仓库建立他们对应的增、删、改、查的权限(通过导航栏中 Privileges 链接),并将这些权限赋予不同的角色(通过导航栏中 Roles 链接)

    第一步:建立两个宿主仓库,分部用来不是快照构建和发布构建;

    第二步:基于这两个宿主仓库建立权限;

    第三步:创建一个包含上述权限的角色;

    第四步:根据需要将角色分配给项目的团队成员。

    这样,其他团队成员默认只有读取这两个仓库的内容权限,而拥有这两个仓库增删改权限的团队成员就可以上传构建了。

八. Nexus的调度任务

      Nexus 提供了如下一系列可调度任务( Scheduled Tasks )来方便用户管理系统。用户可以设定这些任务的运行频率。

        1Download Indexes:为代理仓库下载远程索引

        2Empty Trash:清空 Nexus 的回收站

        3Evict Unused Proxied Items From Repository Caches:删除代理仓库中长期未被使用的构件缓存。

        4Expire Repository Caches:清空代理仓库的缓存,重新去获取远程仓库的信息。

        5Publish Indexes:将仓库索引发布成可供 m2eclipse 和其他 Nexus 使用的格式。

        6Purge Nexus TimeLine:删除 Nexus 时间线文件,该文件用于建立系统的 RSS 源。

        7Rebuild Maven Metadata Files:基于仓库内容重新创建 metadata 。

        8ReIndex Repositories:为仓库重新编纂索引。

    用户可以通过导航栏中 Scheduled Tasks 链接创建可调度任务。

九. 其他私服软件

    其他私服软件还有:Archiva,它是Apache的顶级项目,地址为:http://achiva.apache.org

      JFrog的Artifactory,它将构件存储在数据库中,地址为:http://www.jfrog.org/products.php 。



你可能感兴趣的:(8,使用Nexus创建私服)