maven在实际使用中使用最多的是依赖管理工具,从中央仓库中下载包到本地仓库中,并在pom文件中引入依赖的jar包,那么在项目中就可以使用了。而每个公司不同部门,部门中的不同项目组,都会发布自己的项目,或者使用其他项目组发布的项目,如何统一管理公司内部各个项目之间的依赖关系呢?这样就引入了私有服务器,即公司内部所有部门,所有项目组都将项目发布到统一的服务器上供大家使用。
参考文献:http://blog.csdn.net/shenshen123jun/article/details/9084293
本文使用windows64位版本的nexus。
下载地址:https://www.sonatype.com/download-oss-sonatype
安装完成后,会弹出nexus的主页面如下图所示:
访问地址:http://localhost:9555/nexus/#welcome,其中9555为安装时设置的端口号。
点击右上角的Log in登陆,默认用户名和密码为admin/admin123。
登陆成功后,进入nexus的主页面,如下图所示,点击左边的Repositories导航栏可看到nexus已经配置好的一些仓库类。
图中重要部分介绍:
Type :仓库的类型,如proxy代理仓库,group组仓库,hosted宿主仓库
Format :是支持maven1 还是maven2 还是其他格式
Policy :支持快照版本还是发布版本
Repository Path :这个就是仓库地址
常用的仓库类型有hosted、proxy、group这三种,仓库种类解释如下:
proxy :代理仓库,即为代理下载依赖的仓库,如Central从中央仓库寻找依赖。
hosted:宿住仓库,该类型可以建立如Snapshot、release的仓库。其中3rd party 为第三方依赖的仓库,即不能通过Central下载的依赖,都可以通过自行下载jar包, 并上传到仓库,供大家使用。
group:组仓库,可将其它类型的仓库放在一个组中统一管理,由外部人员调用;
搭建私服之前需要将中央仓库的依赖下载到本地私有仓库中,nexus默认是不自动下载的,这里我们需要配置一下。
首先选中Central仓库,在Configuration配置中,将Download Remote Indexes的属性设置为true,最后再点击Central仓库,右键,点击Repair index,这样会在后台生成一个任务,自动下载索引了。
后台任务查看,任务在运行中。
点击add按钮,选择Hosted Repository,下方出现填写配置信息,将红框中选中的配置完成后,点击保存,snapshot仓库创建完成。
release仓库与上面的类似。
group组仓库创建不一样,需要选择Repository Group选项,且在设置时,Ordered Group Repositores需要配置,将quark-snapshot、quark-release、Central、3rd party包含在内,即该组包括内部发布的快照、正式版本、从远程仓库下载的依赖、以及第三方依赖。其中3rd party添加之前,需要将3rd party从Public Repositories maven公共仓库中去除掉。
这样内部的仓库创建完成了,最后可看到如下图所示:
首先为snapshot 和 release 配置权限,配置过程如下,这里只演示release的配置过程。
两个都配置完成后,可以查看,如下图:
点击add新增权限,出现如下图:
若下图中并未出现你配置的权限,请重启nexus就可以出现下图。
点击add时,填出如下页面,并筛选出上面配置的quark-role角色:
如上公司内部私服配置完成,下面将介绍在项目中使用私服,以及发布项目到私服中。
首先需要在settings配置文件中加入如下配置:
nexusProfilepublicPublic Repositorieshttp://172.16.35.82:9555/nexus/content/groups/quark-group/truetrue
publicPublic Repositorieshttp://172.16.35.82:9555/nexus/content/groups/quark-group/truetrue
nexusProfile
配置镜像文件路径:
nexusMirror*Human Readable Name for this Mirror.http://172.16.35.82:9555/nexus/content/groups/quark-group/
发布项目需要配置权限和发布管理配置:
在settings中servers中添加访问权限:
quark-releasequark-userpasswordquark-snapshotquark-userpassword
在项目pom中,增加如下配置:
quark-releasequark-releasehttp://172.16.35.82:9555/nexus/content/repositories/quark-release/
quark-snapshotquark-snapshothttp://172.16.35.82:9555/nexus/content/repositories/quark-snap/true
配置完成后,就可以使用命令 mvn deploy 发布项目到服务器了,发布项目到nexus私服中,maven会根据version的后缀检查是发布到snapshot还是release中,若未加后缀,则会发布到release中。
我在发布中出现了一个问题,纠结了很久才解决问题,背景是本机有三个工作空间,两个开发工具myeclipse 和 eclipse,都使用同一maven,每一个项目都复制了一份settings文件,使用单独的配置,但是在发布项目时总是报无权限,最后在网上搜索终于定位到问题,因为我项目的settings文件的权限配置server并未生效,最后将server放置到了maven项目下的settings文件中,这样才发布成功。
解决方式:
参考文献地址:http://www.trinea.cn/dev-tools/maven-sonatype-nexus-return-401-which-settings-xml-maven-is-using/
使用maven-help-plugin,一个小巧的辅助工具
1、mvn help:system可以打印所有可用的环境变量和Java系统属性
2、mvn help:effective-pom用于查看当前生效的POM内容,指合并了所有父POM(包括Super POM)后的XML,所以可用于检测POM中某个配置是否生效
3、mvn effective-settings可用于查看当前生效的settings.xml文件内容,所以可用于判断某个settings配置是否生效