Nexus

Nexus开源版本的一些特性

  较小的内存占用,最小仅为28MB

  基于ExtJS的友好界面

  基于Restlet的完全REST API

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

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

  支持仓库索引和搜索

  支持从界面上传Maven构件

  细粒度的安全控制

Bundle方式安装Nexus

  Nexus的Bundle自带了Jetty容器。将Bundle文件解压后会得到两个子目录:nexus-webapp-1.7.2(该目录包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等)和sonatype-work(该目录包含了Nexus生成的配置文件、日志文件、仓库文件等)。

  nexus-webapp-1.7.2(version)是Nexus所必需的,而且所有相同版本Nexus实例包含的该项目内容是一样的。第二个目录不是必须的,Nexus会在运行时动态创建该目录。Nexus在不同用户的不用机器上会有不同的配置和仓库内容。当用户需要备份Nexus的时候,默认备份sonatype-work/目录,因为该目录包含了用户特定的内容。

  用户只需要进入nexus-webapp-1.7.2/bin/jsw/windows-x86-32/子目录,然后直接运行nexus.bat即可启动Nexus。Nexus的访问地址为localhost:8081/nexus/

  若发生端口冲突,则编辑nexus-webapp-1.7.2/conf/plexus.properties,找到属性application-port,按需要将默认值8081改成其他端口号即可

nexus-webapp-1.7.2/bin/jsw/windows-x86-32/下还有一些脚本

  Installnexus.bat  //将Nexus安装成Windows服务

  Unistallnexus.bat  //卸载Nexus Windows服务

  Startnexus.bat       //启动Nexus Windows服务

  Stopnexus.bat   //停止Nexus Windows服务

  Pausenexus.bat   //暂停Nexus Windows服务

  Resumenexus.bat  //恢复暂停的Nexus Windows服务   

War方式安装Nexus

  将war包直接部署到Web容器中即可。启动容器后登陆localhost:8080/nexus

Nexus默认的管理员用户名和密码为admin/admin123

Nexus中Repository中有四种类型:groupId(仓库组),hosted(宿主),proxy(代理)和virtual(虚拟)。每个仓库的格式为maven2或maven1。此外仓库还有一个属性为policy(策略),表示该仓库为发布版本(release)还是快照(snapshot)仓库版本。

Maven Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件

Releases:这是一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件

Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件

3rd parth:这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件

Apache Snapshots:这是一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构件

Codehaus Snapshots:这是一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件

Google Code:这是一个策略为Release的代理仓库,用来代理Google Code Maven仓库的发布版本构件

java.net - Maven 2:这是一个策略为Release的代理仓库,用来代理java.net Maven仓库的发布版本构件

Public Repository:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务

Public Snapshot Repositories: 该仓库组将上述所有策略为Snapshot的仓库聚合饼通过一致的地址提供服务

Maven可以直接从宿主仓库和代理仓库下载构件。代理仓库会间接地从远程仓库下载并缓存构件。Maven也可以从仓库组下载构件,仓库组并没有实际内容,它会转向其包含的宿主仓库或代理仓库获得实际构件的内容

创建宿主仓库

  Default Local Storage Location表示该仓库的默认存储目录,该字段为空,待仓库创建好后,该值就会成为基于sonatype-work的一个文件路径,如项目路径/sonatype-work/nexus/storage/repository-id/,Override Local Storage Location可以用来配置自定义的仓库目录位置。在Access Settings小组中,Deployment Policy用来配置该仓库的部署策略,选项有只读(禁止部署)、关闭重新部署(同一构件只能部署一次)以及允许重新部署。Allow File Browsing表示是否允许浏览仓库内容。每个仓库都有一个Browse Storage选项卡,用户以树形结构浏览仓库存储文件的内容。Include in Search表示是否对该仓库进行索引并提供搜索。Publish URL用来控制是否通过URL提供服务,如选用flase,当访问该仓库的地址时,会得到HTTP 404 Not Found错误。配置中最后的Not Found Cache TTL表示当一个文件没有找到后,缓存之一不存在的信息的时间。以默认值1440分钟为例,如果某文件不存在,那么在之后的1440分钟内,如果Nexus再次得到该文件的请求,它将直接返回不存在信息,而不会查找文件系统。

创建代理仓库最重要的事远程仓库地址,即Remote Storage Location,用户必须在这里输入有效值。Download Remote Indexes表示是否下载远程仓库的索引。当某些远程仓库有索引,下载其索引后,即使没有缓存远程仓库的构件,用户还是能够在本地搜索和浏览那些构件的基本信息。Checksum Policy配置校验和出错时的策略,用户可以选择忽略、记录警告信息或拒绝下载。当远程仓库需要认证的时候,可以在Authentication配置。Expiration Settings较宿主仓库多了Artifact Max Age和Metadata Max Age。前者表示构件缓存的最长时间,后者表示仓库元数据文件缓存的最长时间。对于发布版本仓库来说,Artifact Max Age默认值为-1,表示构件缓存后就一直保存着,不再重新下载。对于快照版仓库来说,Artifact Max Age默认值为1440分钟,表示每隔一天重新缓存代理的构件。HTTP Request Settings用来配置Nexus访问远程仓库时HTTP请求的参数,Override HTTP Proxy Settings用来配置HTTP代理。

创建Nexus仓库组

  用户可以直观的选择Nexus中的仓库,将其聚合成一个虚拟的仓库组。仓库组所包含的仓库的顺序决定了仓库组遍历其所含仓库的次序,因此将常用的仓库放在前面。

Nexus提供了GAV搜索、类名搜索和校验和搜索等功能,用户可以单击搜索页面左上角的下拉菜单选择高级搜索功能。

GAV搜索:允许用户通过设置GroupId、ArtifactId和Version等信息来进行更有针对性的搜索

类名搜索:允许用户搜索包含某个Java类的构件

检验和搜索:允许用户直接使用构件的校验来搜索该构件

Nexus能够遍历一个Maven仓库所有的内容,搜集他们的坐标、校验和及所含的Java类信息,然后以nexus-indexer的形式保存起来。中央仓库维护了这样一个nexus-indexer,因此本地的nexus下载到这个索引后,就能在此基础上提供搜索和浏览等服务。不是任何一个公共仓库都提供nexus-indexer,对于那些不提供索引的仓库来说,我们就无法对其进行搜索。

在pom中配置Nexus

<project>
    <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>

    <pluginRepository>
        <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>
    </pluginRepository>
</project>

在settings中配置Nexus

<settings>
    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>Nexus</name>
                    <url>http://localhost:8081/nexus/content/groups/public/</url>
                    <releases>
                        <enables>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>
            </plugiinRepositories>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>      

配置镜像让Maven只是用私服

  这里的仓库及插件仓库配置id都为central,覆盖了超级POM中央仓库的配置,他们的url已无关紧要,因为所有请求都会通过镜像访问私服地址。配置仓库及插件仓库的主要目的是开启对快照版本下载的支持,当Maven需要下载发布版本或快照构件的时候,它首先检查central,看该类型的构件是否支持,之后再根据镜像匹配规则转而访问私服仓库地址。

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

    <profiles>
        <profile>
            <id>nexus</id>
            <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>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
    
</settings>     

配置Maven部署构件至Nexus

<project>
    <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>
</project>

Nexus的仓库对于匿名用户来说是只读的。因此还需要在settings.xml中配置认证信息

<settings>
    <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>
    </servsers>
</settings>

Nexus是基于权限做访问控制的,服务器的每一个资源都有相应的权限来控制。因为用户执行特性的操作时就必须拥有必要的权限。管理员必须以角色Role的方式将权限赋予Nexus用户。

Nexus预定义了三个用户

admin:该用户拥有对Nexus服务的完全控制

deployment:该用户能够访问Nexus,浏览仓库内容,搜索并上传部署构件,但无法对Nexus进行任何配置

anonymous:该用户对应了所有未登录的匿名用户,他们可以浏览仓库并进行搜索

Nexus预定义了一些常用且重要的角色

UI:Basic UI Privileges:包含了访问Nexus界面必须的最基本的权限

UI:Repository Browser:包含了浏览仓库页面所需要的权限

UI:Search:包含了访问快速搜索栏及搜索页面所需要的权限

Repo:All Repositories(Read):给予用户读取所有仓库内容的权限,没有仓库的读权限,用户将无法在仓库页面上看到实际的仓库内容,也无法使用Maven从仓库下载构件

Repo:All Repositories(Full Control):给予用户完全控制所有仓库内容的权限。用户不仅可以浏览、下载构件,还可以部署构件及删除仓库内容

我们应该为每个项目分配独立的仓库,并且只将仓库的部署、修改和删除权限赋予该项目的成员,其他用户只能读取、下载和搜索该仓库的内容。在Nexus,增删改查权限是基于Repository Target建立的,Repository Target实际上是一系列的正则表达式,在访问仓库某路径下内容的时候,Nexus会将仓库路径与Repository Target的正则表达式一一匹配,以检查权限是否正确。

Nexus提供了一系列可配置的调度任务来方便用户管理系统。用户可以设定这些任务的运行方式。调度任务会在适当的时候在后台运行。单击Scheduled Tasks链接建立一个任务。

Nexus包含了一下几种类型的调度任务:

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

Empty Trash:清空Nexus的回收站

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

Expire Repository Caches:Nexus为代理仓库维护了远程仓库的信息以避免不必要的网路流量,该任务清空这些信息以强制Nexus去重新获取远程仓库的信息

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

Purge Nexus Timeline:删除Nexus的时间线文件,该文件用于简历系统的RSS源

Rebuild Maven Metadata Files:基于仓库内容重新创建仓库元数据文件maven-metadata.xml,同时重新创建每个文件的校验和md5和sha1

Reindex Repositories:为仓库编纂索引

Remove Snapshots From Repository:以可配置的方式删除仓库的快照构件

Synchronize Shadow Repository:同步虚拟仓库的内容(服务于Maven1)

原文地址:https://www.cnblogs.com/forerver-elf/p/6245875.html