目录
Sonatype Nexus Repository OSS下载与安装
私服介绍
私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
Nexus介绍
Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。
正常做法是在本地架设一个Maven仓库服务器,即利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证。
Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。
为什么要构建Nexus私服?
如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
总之,在本地构建nexus私服的好处有:
1)加速构建;
2)节省带宽;
3)节省中央maven仓库的带宽;
4)稳定(应付一旦中央服务器出问题的情况);
5)控制和审计;
6)能够部署第三方构件;
7)可以建立本地内部仓库;
8)可以建立公共仓库
这些优点使得Nexus日趋成为最流行的Maven仓库管理器。
安装环境说明:
1.Windows7 64位
2.JDK1.8 64位
3.Sonatype Nexus Repository OSS 3.6.1
4.Apache Maven 3.5.2
几种repository的类型:
Ø hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
Ø proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
Ø group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
Sonatype Nexus Repository OSS下载与安装
1.登陆Sonatype Nexus官网,下载Sonatype Nexus Repository OSS(开源社区版)
2.解压到本地硬盘
3.进入yourPath/nexus-3.6.1-02-win64/nexus-3.6.1-02/bin目录下,以管理员身份打开命令行:nexus /install Nexus3 ,该命令将会将Nexus Repository注册成为Windows服务。
4.进入windows服务管理页面,启动刚刚注册的Nexus3服务
5.等几分钟到Nexus Repository程序初始化完成,打开浏览器,输出localhost:8081,出现如下界面,安装成功。
可以点击上面的“设置”图标,在“设置”里可以添加用户、角色,对接LDAP等的设置,如下:
可以在“管理”里查看nexus的系统信息
Nexus的web界面功能介绍
1.Browse Server Content
1.1 Search
这个就是类似Maven仓库上的搜索功能,就是从私服上查找是否有哪些包。
注意:
1)在Search这级是支持模糊搜索的,如图所示:
2)如果进入具体的目录,好像不支持模糊搜索,如图所示:
1.2 Browse
1)Assets
这是能看到所有的资源,包含Jar,已经对Jar的一些描述信息。
2)Components
这里只能看到Jar包。
2.Server Adminstration And configuration
看到这个选项的前提是要进行登录的,如上面已经介绍登陆方法,右上角点击“Sign In”的登录按钮,输入admin/admin123,登录成功之后,即可看到此功能,如图所示:
2.1 Blob Stores
文件存储的地方,创建一个目录的话,对应文件系统的一个目录,如图所示:
2.2 Repositories
1)Proxy
这里就是代理的意思,代理中央Maven仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。
这样的优势只要其中一个人从中央库下来了,以后大家都是从Nexus私服上进行下来,私服一般部署在内网,这样大大节约的宽带。
创建Proxy的具体步骤
1--点击“Create Repositories”按钮
2--选择要创建的类型
3--填写详细信息
Name:就是为代理起个名字
Remote Storage: 代理的地址,Maven的地址为: https://repo1.maven.org/maven2/
也可以是使用的外部私仓是阿里的仓库http://maven.aliyun.com/nexus/content/groups/public
Blob Store: 选择代理下载包的存放路径
2)Hosted
Hosted是宿主机的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
Hosted的创建和Proxy是一致的,具体步骤和上面基本一致。如下:
注意事项:
Deployment Pollcy: 需要把策略改成“Allow redeploy”。
release私仓:
snapshot私仓:
3)Group
group私仓组:
2.3 Security
这里主要是用户、角色、权限的配置(上面已经提到了在这里添加用户和角色等)
2.4 Support
包含日志及数据分析。
2.5 System
主要是邮件服务器,调度的设置地方
这部分主要讲怎么和Maven做集成,集成的方式主要分以下种情况:代理中央仓库、Snapshot包的管理、Release包的管理、第三方Jar上传到Nexus上。
如何在项目中使用
1 在maven的setting文件中配置 mirror
<mirrors>
<!--
<mirror> //阿里云的中央仓库
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
-->
<mirror> //私服 vincent-public 是group类型的repository
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/vincent-public/</url>
</mirror>
</mirrors>
注意这里只配置了私服地址没有配置中央仓库是因为 repository vincent-proxy代理了阿里的中央仓库,而组类型group的repository vincent-public中包含了vincent-proxy
也可以在pom文件中配置 这种情况只针对单个项目配置私服
<repositories>
<repository>
<id>nexus</id>
<name>dev Repository</name>
<url>http://localhost:8081/repository/vincent-public/</url>
</repository>
2 配置 nexus的用户名密码
<servers>
<server>
<id>nexus</id> //注意server中的id与mirror中的id需要一致。
<username>admin</username>
<password>admin123</password>
</server>
</servers>
3 在项目中的pom文件中配置distributionManagement 当使用 mvn clean deploy 命令时 将当前项目打包到私服
<distributionManagement>
<repository>
<id>nexus</id>
<name>Releases</name>
<url>http://localhost:8081/repository/vincent-releases</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Snapshot</name>
<url>http://localhost:8081/repository/vincent-snapshots</url>
</snapshotRepository>
</distributionManagement>