简介
- 公司在自己的局域网内搭建自己的远程仓库服务器,称为私服。
- 私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
- 当多人项目开发的时候,尤其聚合项目开发,项目和项目之间需要有依赖关系,通过maven私服,可以保存互相依赖的jar包,这样的话就可把多个项目整合到一起。
- 众所周知,在使用maven时,在局域网中搭建私服,可以有效的节省互联网的带宽,加快项目的构建速度,因此在开发中,搭建私服得到了广泛的运用。
搭建私服环境
下载nexus
- Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。
安装nexus
- Nexus2需要安装:
- cmd进入nexus的bin目录,执行:
nexus.bat install
- 安装后,系统服务中会出现nexus服务
- Nexus3不需要安装
卸载nexus
- Nexus2卸载:
- cmd进入nexus的bin目录,执行:
nexus.bat uninstall
- Nexus3直接删除nexus3的文件就行
启动nexus
- Nexus2启动服务方法1:
- cmd进入bin目录,执行:
nexus.bat start
- Nexus2启动服务方法2:
- windows服务中直接启动nexus服务
- Nexus3启动服务方法:
- cmd进入bin目录中,执行:
nexus.exe /run
如何验证是否启动成功
- 查看nexus的配置文件conf/nexus.properties
# Jetty section application-port=8081 # nexus的访问端口配置 application-host=0.0.0.0 # nexus主机监听配置(不用修改) nexus-webapp=${bundleBasedir}/nexus # nexus工程目录 nexus-webapp-context-path=/nexus # nexus的web访问路径 # Nexus section nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus仓库目录 runtime=${bundleBasedir}/nexus/WEB-INF # nexus运行程序目录
访问Nexus
- Nexus2的访问地址:http://localhost:8081/nexus/
- Nexus3的访问地址:http://localhost:8081
- 使用Nexus内置账户
admin/admin123
登陆
私服仓库类型
Nexus2的仓库
nexus的仓库有4种类型
- nexus仓库默认在sonatype-work目录中
hosted
,宿主仓库,部署自己的jar到这个类型的仓库,包括releases
和snapshot
两部分,Releases
公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库proxy
,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。group
,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。virtual
(虚拟):兼容Maven1 版本的jar或者插件
仓库作用
Releases
: 这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.Snapshots
:这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.3rd Party
:顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。
Maven用到的Repositories说明
- maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
- maven-releases:私库发行版jar
- maven-snapshots:私库快照(调试版本)jar
- maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用
将项目发布到私服
- 首先需要在Maven的
setting.xml
文件中添加配置
<server> <!--对应仓库ID--> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <!--对应仓库ID--> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
- 下面内容,上传哪个项目,就在哪个项目pom.xml文件中添加配置。
注意:这里url地址Nexus2和Nexus3不同。在查看仓库页面中,每个仓库后面有对应的URL地址
<!-- 配置远程发布到私服,mvn deploy --> <distributionManagement> <repository> <id>releases</id> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
发布
- 然后运行Maven的
deploy
命令,要运行pom.xml文件有上面配置的项目,不同开发工具会有差异。- 如果
<version>1.0-SNAPSHOT</version>
则自动部署到snapshotRepository
中- 反之部署到
repository
中- 如果所有配置正确,发现上传私服失败,需要进入私服找到指定仓库(一般不用)
- Repository—Access Settings—Deployment Policy修改为允许发布
从私服下载jar包
- 下载需要在Maven的
setting.xml
文件中添加配置
注意:这里url地址Nexus2和Nexus3不同。在查看仓库页面中,每个仓库后面有对应的URL地址
<profile> <id>dev</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> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 --> <pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 --> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> </profile>
激活私服
- 也在Maven的
setting.xml
文件中添加配置
<!-- 激活 --> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>
注意:
- 私服一般安装在内网的其他服务器上,而不是本机上。
- 因此上面的配置中localhost的部分在实际情况中应该修改为公司中内网的私服服务器地址。