Maven实战 -9. 使用 Nexus 创建私服 - 高飞网

9. 使用 Nexus 创建私服

2017-08-11 16:07:23.0

    私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。通过建立自己的私服,就可以降低中央仓库负荷,节省外网带宽、加速Maven构建、自己部署构件等,从而高效地使用Maven。

9.1 Nexus简介

    下载地址:http://www.sonatype.org/nexus/downloads/

    Nexus有两个版本,一种是OSS(开源版)的,是免费的;另一种是Pro(专业版)的,为收费版,使用OSS已经可以满足绝大多数需求了。

        开源版本的特性:

  1. 较小的内存占用;
  2. 基于ExtJS的友好界面
  3. 基于Restlet的完全REST API
  4. 支持代理仓库、宿主仓库和仓库组
  5. 支持仓库索引和搜索
  6. 支持从界面上传Maven构件
  7. 细粒度的安全控制。

    而Nexus专业版是付费购买的,除了开源版本的所有特性之外,主要包含了一些企业安全控制、发布流程控制等需要的特性。

9.2 安装Nexus

    Nexus是典型的Java Web应用,有两种安装包,一种是包含Jetty容器的Bundle包,另一种是不包含Web容器的war包。

9.2.1 下载Nexus

    到笔记记录时,nexus已经到了3.x版本,这里只学习nexus核心的东西,因此只下载了2.x版本。https://www.sonatype.com/oss-thank-you-zip

9.2.2 Bundle方式安装Nexus

    Nexus的Bundle方式自带了Jetty容器,因此用户不需要额外的Web容器就能直接启动Nexus。首先将文件解压,会得到如下两个子目录:

  1. nexus-2.11.4-01:包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等
  2. sonatype-work:包含了Nexus生成的配置文件、日志文件、仓库文件等。

    其中第一个目录是Nexus必须的,而且所有相同版本Nexus实例所包含的该目录内容都是一样的。而第二个目录不是必须的,Nexus会在运行时自动创建该目录,不过它的内容对于各个Nexus实例是不一样的,因为不同用户在不同机器上使用的Nexus会有不同的配置和仓库内容。当用户需要备份Nexus的时候,默认备份sonatype-work/目录即可。

    本例中运行的window版本,要到D:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\windows-x86-64目录下,运行console-nexus.bat命令。

  


9.2.4 登录Nexus

    Nexus拥有全面的权限控制功能,默认的Nexus访问都是匿名的,而匿名用户仅包含一些最基本的权限,要全面学习和管理Nexus,就必须以管理员方式登录。可以单击右上角的Log In登录,Nexus的默认管理员用户名和密码为admin/admin123。

9.3 Nexus的仓库与仓库组

9.3.1 Nexus内置的仓库

    仓库有四种类型:group(仓库组)、hosted(宿主)、proxy(代理)和virtual(虚拟)。每个仓库的格式(format)为maven2或maven1。此外,仓库还有一个属性为Policy(策略),表示该仓库为发布(Release)版本还是快照(Snapshot)版本仓库。最后两列为仓库的状态(status)和路径(path)。


    Maven1格式的仓库暂不考虑,虚拟仓库的作用实际上是动态地将仓库内容格式转换,换言之,也是为了服务maven1格式,因此也不讨论。

    下面介绍内置的一些仓库(以2.x版本列出的为准):

  1. Central:是Maven仓库的代理仓库,会缓存下载过年中央仓库的构件
  2. Release:用来发布稳定版本的宿主仓库,如本公司打出的一些接口api
  3. Snapshot:用来发布快照版本的宿主仓库,如本公司开发过程中打出的接口的快照api
  4. 3rd party:用来保存在远程仓库中没有的第三方类库的宿主仓库,如oracle的jdbc驱动。
  5. Apache Snapshots:Apache的快照仓库的代理仓库。
  6. Public Respositories:该仓库将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。

9.3.2 Nexus仓库分类的概念

    Maven可以直接从宿主仓库、代理仓库、仓库组中下载构件,只不过代理仓库会间接的向远程仓库下载并缓存构件,仓库组没有实际内容,它会转向其包含的宿主仓库或代理仓库通过实际构件的内容。

9.3.3 创建Nexus宿主仓库

    单击左侧的Repositories链接,在右边的面板中,选择Add,接着在下拉菜单中选择Hosted Repository,就会看到如下所示的配置界面。


    Repository ID:自定义的仓库ID;Repository Name:仓库名称;Repository Type:该仓库的类型,这里是宿主仓库;Provider:提供商,一般选Maven2;Repository Policy:配置是发布版构件仓库还是快照仓库;Default Local Storage Location:该仓库的默认存储目录,默认情况下会基于sonatype-work的一个文件路径,如sonatype-work/nexus/storage/repository-id/;Override Local Storage Location:配置定义的仓库目录配置;

    在Access Settings中,Depolyment Policy发布策略,可选有只读(禁止部署)、关闭重新部署(同一构件只能部署一次)以及允许重新部署。Allow File Browsing,是否允许浏览仓库内容,一般选True。每个仓库(包括仓库和仓库组)都有一个Browsing Storage选项卡,用户以树形结构浏览仓库存储的文件内容。Include in Search表示是否对该仓库进行索引并提供搜索。Publis URL,用来控制是否通过URL提供服务,如果为False,该访问该仓库的地址时,会得到HTTP 404 Not Found。Not Found Cache TTL,表示当一个文件没有找到后,缓存这一不存在信息的时间。默认值为1440分钟。

9.3.4 创建Nexus代理仓库

    首先单击界面左边的Repository链接,右边面板中选择Add,下拉选择Proxy Repository,会看到如下配置:


    基本配置如前述宿主仓库一致,这里重要的是Remote Storage Location,即有效的远程仓库的位置。Download Remote Indexes表示是否下载远程仓库的索引,如果远程仓库有索引,下载后,即使本地没有远程仓库的构件,也能查找浏览那些构件的基本信息。Checksum Policy校验和检查。AUthentication,如果远程仓库有认证,请勾选。

    Access Settings中,注意Expiration Settings多了Artifact Max Age和Metadata Max Age,前者表示构件缓存时长,后者表示元数据缓存的时长,如果为-1表示一直保存,不再重载下载。

9.3.5 创建Nexus仓库组

    创建时选择Repository Group,会出现下面的界面 。


    仓库组所包含的仓库的顺序决定了仓库组遍历其所包含仓库的次序,因此最好常用的仓库放在前面,当用户从仓库组下载构件的时候,就能够尽快地访问到包含构件的仓库。


9.4 Nexus的索引与构件搜索