参考:http://blog.csdn.net/typa01_kk/article/details/49228873
http://blog.csdn.net/wang379275614/article/details/43940259 (配置仓库等参考)
http://blog.csdn.net/liujiahan629629/article/details/39272321 (配置仓库等参考)
http://www.itnose.net/detail/6178985.html (上传jar到第3方库)
http://blog.csdn.net/zwc0910/article/details/17349111 (maven如何使用私服)
http://www.54tianzhisheng.cn/2017/10/14/Nexus3-Maven/ (Centos7 搭建最新 Nexus3 Maven 私服 )
Nexus是一个强大的Maven仓库管理器,
它极大地简化了自己内部仓库的维护和外部仓库的访问。
利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证。
注:最终启动,如果远程访问关闭,或者是stoped的nexus的jre版本和本地jre的version不符合(一般1.7就ok)!
1、我下载的是 nexus-2.13.0-01-bundle.tar.gz, 安装的jdk1.7版本
安装nexus,本地仓库默认的jar包存储位置是:/sonatype-work/nexus/storage/central。由于Central仓库占用存储较大,所以要注意存储位置。
我的安装位置/home/nexus目录下的,解压nexus-2.13.0-01-bundle.tar.gz后
drwxr-xr-x. 8 1001 1001 4096 Apr 12 22:11 nexus-2.13.0-01
drwxr-xr-x. 3 1001 1001 4096 Apr 12 22:21 sonatype-work
2、修改配置文件
[root@localhost nexus]# vim nexus-2.13.0-01/conf/nexus.properties
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus #可以去掉nexus,保留/
# Nexus section nexus-work是jar包存放地址,可以修改为其它地址,也可以不修改
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF
3、修改jetty配置
[root@localhost nexus]# vim nexus-2.13.0-01/bin/nexus
# Set this to the root of the Nexus installation
#NEXUS_HOME=".." #将这行注释掉,修改为下边的,
NEXUS_HOME="/home/nexus/nexus-2.13.0-01"
# If specified, the Wrapper will be run as the specified user.
# IMPORTANT - Make sure that the user has the required privileges to write into the Nexus installation directory.
# NOTE - This will set the user which is used to run the Wrapper as well as
# the JVM and is not useful in situations where a privileged resource or
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER=
RUN_AS_USER=root #添加这行
# Application
APP_NAME="nexus"
APP_LONG_NAME="Nexus OSS"
4、将nexus设置为开机启动
[root@localhost nexus]# cd nexus-2.13.0-01/bin
[root@localhost bin]# cp ./nexus /etc/rc.d/init.d/
[root@localhost bin]# cd /etc/rc.d/init.d/
[root@localhost init.d]# chkconfig --add nexus
[root@localhost init.d]# chkconfig --list | grep nexus
nexus 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost init.d]# chkconfig nexus on
[root@localhost init.d]# chkconfig --list | grep nexus
nexus 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost init.d]#
说明:
nexus的仓库类型分为以下四种:
group: 仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
hosted:宿主 ,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
proxy:代理,它们被用来代理远程的公共仓库,如maven中央仓库。
virtual:虚拟
仓库组和多个仓库:
Public Repositories: 仓库组
3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
5、启动nexus
[root@localhost init.d]# cd /home/nexus/nexus-2.13.0-01/bin/
[root@localhost bin]# ./nexus start #启动nexus
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.
6、浏览器查看是否OK!
http://172.17.123.137:8081/nexus/
默认的用户名/密码是:admin、admin123,登录后自己修改密码;
7、如果想从远处中央库下jar包,则需要开启远处索引
登录后,我这个版本点击左侧菜单 Views/Repositories 下的 Repositories 菜单;Apache Snapshots和Central,分别展示如下图:
保存后,就它就会自动下载中央库的jar包了,点击configuration 菜单前的Browse Index 可以查看是否下载成功;在左边菜单栏里面有个Artifact Search, 在输入框里面输入你想要搜索的构件名字,比如:maven, 那么查询结果就出出来了。
8、管理本地仓库
我们前面讲到类型为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仓库。
首先我们可以创建本地仓库:Views/Repositories 下的 Repositories 菜单展示界面上添加仓库,如下图:
出现界面如下所示:
我填写:chbigdata 和 chbigdata repository 保存就OK;
9、创建仓库组
Nexus 中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据 groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者 proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。
Nexus 中默认自带了一个名为“Public Repositories”组,点击该组可以对他保护的仓库进行调整,把刚才建立的公司内部仓库zfy repostiory加入其中,这样就不需要再在maven中明确指定内部仓库 的地址了。
创建仓库组还是创建仓库的地方点击,如下图:
弹出相关界面,说明如下
10、创建代理仓库(可选)
点击菜单栏上的Add按钮后选择Proxy Repository,看到如下所示配置界面:
到此,基本上就OK了,
11、项目中如何使用私服
maven 的setting设置;通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可。如下图:
仓库组默认包含本地仓库Releases,snapshots, 3rd party和代理仓库MavenCentral. 你可以在Configuration配置页添加仓库到这个仓库组. 如果需要你还可以创建一个仓库组,在Repositories菜单处选add-->Repository Group即可
12、 项目中配置Nexus仓库
如果只有一个项目,可以配置在项目的pom文件中
如果有多个项目都使用Nexus的配置,可以将如上皮遏制放到Maven的Settings文件中:
13、配置仓库镜像
默认的,如果本地仓库找不到依赖的构件,这时需要东西时先到Nexus上找,如果发现Nexus服务关闭后,会自动到中央仓库找。
如果我们想覆盖中央仓库的默认地址,强制依赖的东西都到Nexus中去找,即使Nexus关闭也不会到中央工厂去下载:
修改Maven的Settings文件:
注意,如果本地仓库有东西,但Nexus中没有,需要将该东西考到Nexus仓库中,然后更新仓库索引: