一般项目中要使用到的插件都是去maven中央仓库下载,在一个公司内部,如果每个人都去中央仓库下载,不仅浪费流量,而且每个人都需要去做重复的事情,浪费了大量时间,降低了效率;而且有些第三方插件在中央仓库上是没有的;因此可以在公司内部搭建一个maven私服,将这些第三方插件存放在maven私服上,每个人将自己的maven远程仓库设置到这个私服上,就可以从私服上下载插件,如果私服上没有的插件,则私服会到maven中央仓库上去下载到私服本地上,然后再从私服上下载到开发人员本机上;而且开发人员也可以将第三方或者自己开发的组件上传到私服上供项目组内其他人员使用;
一、Nexus安装:
1、下载:
Nexus是常用的搭建Maven 私服的工具,
Nexus常用功能就是:指定私服的中央地址、将自己的Maven项目指定到私服地址、从私服下载中央库的项目索引、从私服仓库下载依赖组件、将第三方项目jar上传到私服供其他项目组使用。
在浏览器中打开地址:https://www.sonatype.com/download-oss-sonatype,可以选择下载Nexus 3.x或者Nexus 2.x;
下载完成后解压到一个指定目录;
2、打开Nexus目录下的bin/jsw/conf/wrapper.conf文件,修改其中的“wrapper.java.command”变量的值为java.exe所在的绝对路径,如:
wrapper.java.command= F:\Work\jdk1.7.0_60\bin\java
3、将Nexus的bin路径添加到系统的环境变量PATH中,添加完成后在cmd命令行中输入Nexus并回车,如果出现下面的界面则说明设置成功,否则请检查Nexus的bin路径下是否有Nexus.bat文件:
4、启动Nexus有两种方式:
a) 第一种是执行Nexus目录下的bin\jsw\ windows-x86-64\console-nexus.bat文件,其中windows-x86-64根据你机器的操作系统的不同而选择不同的目录;
b) 第二种方式是通过命令行的方式操作的:首先在cmd命令行下输入Nexus install,然后在服务列表中可以查看到有Nexus服务:
然后命令行下输入Nexus start即可启动Nexus服务;
5、启动成功后,打开浏览器,地址栏中输入:http://localhost:8081/Nexus,回车后出现下面的界面就表示Nexus启动成功:
其中端口8081是Nexus默认的端口,可以在Nexus目录的conf/nexus.properties配置文件中修改变量application-port的值;
6、点击右上角的Lonin按钮登录(初始默认的管理员账号是Admin,密码是Admin123);
二、Nexus配置:
(一) 仓库种类:
点击左侧的菜单栏中的Repositories标签,显示如下仓库列表:
1、hosted:内部项目的发布仓库;
a) releases:内部的模块中release模块的发布仓库;
b) snapshots:发布内部的SNAPSHOT模块的仓库;
c) 3rd party:第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
2、Proxy:从maven中央仓库中寻找数据的仓库,相当于是一个代理的作用,客户端从私服上请求下载组件,而Proxy类型的仓库则向中央仓库请求下载组件到私服上,那么下次如果再有请求该组件时就不用向中央仓库请求,而是直接从私服上返回给客户端;
比如说上图中Central仓库的信息中可以看到请求的中央仓库地址是https://repo1.maven.org/maven2/;
3、Group:仓库组,通过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址;仓库组的信息如下:
其中右边列表的仓库表示当前可以被添加到仓库组中的仓库列表,右边列表的仓库表示当前仓库组中拥有的仓库列表;
比如说公司内部搭建的私服,在组件存在时直接下载到客户端,如果不存在时则到中央仓库下载并存储在私服上,然后以后的请求都直接下载到客户端,而这个是多个类型的仓库的组合(Hosted和Proxy类型的组合),那么就可以新建一个仓库组,然后把这几种类型的仓库添加进去,最后将仓库组的统一地址提供给客户端;
(二) 手工上传组件:
这里就以在3rd party仓库下上传组件为例:
1、首先选中“3rd party”仓库,然后切换到Artifact Upload页签上;
2、在GAV Definition上选择“GAV Parameters”,然后在下面输入Group, Artifact和Version信息,Package信息选择对应的类型,一般选jar;
如下图所示:
3、点击“Select Artifact(s) to Upload...”按钮,在弹出的对话框中选择第三方组件jar文件;
4、选择了jar文件后,点击按钮“Add Artifact”,这个jar文件就被添加到Artifacts列表中,此时可以点击“Select Artifact(s) to Upload...”按钮继续添加jar文件,所有文件添加完成后,最后点击“update Artifacts”按钮提交组件,如下图所示:
(三) 修改配置引用私服:
1、在项目中直接引用私服:
直接在项目的POM.xml文件中添加下面的内容:
<repositories>
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://ip:8081/nexus/content/groups/public</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://ip:8081/nexus/content/groups/public</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc</artifactId>
<version>10.1.0.2.0</version>
</dependency>
</dependencies>
2、本机上的所有项目默认都引用私服:
上面的配置方式太麻烦,需要每个项目都这样配置,那么统一修改下maven目录下的settings.xml文件后,本机上的所有项目都默认引用私服,这样就不用每个项目去配置了;
修改maven目录下conf/settings.xml文件,在<profiles>标签下增加下面的内容:
<profile>
<id> nexusrepository </id>
<repositories>
<repository>
<id>nexusrepository</id>
<name>jzxl company nexus repository</name>
<url>http://IP:8081/nexus/content/groups/public/</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
然后在<profiles>标签外面增加激活属性:
<activeProfiles>
<activeProfile>nexusrepository </activeProfile>
</activeProfiles>
这样客户端请求下载组件时统一先到私服上下载,如果私服上没有则到中央仓库上下载;而如果不想到中央仓库下载,私服上下载失败时就返回的话,可以通过在settings.xml文件中增加mirror属性控制;
三、发布组件:
1、在工程的POM.xml文件中增加发布标签信息:
<distributionManagement>
<repository>
<id>maventest-release</id>
<name>maven test release repository</name>
<url>http://IP:8081/....../release/</url>
</repository>
<snapshotRepository>
<id>maventest-snapshot</id>
<name>maven test snapshots repository</name>
<url>http://IP:8081/....../snapshots/</url>
</snapshotRepository>
</distributionManagement>
上面的配置,一个配置了release版本发布的信息,一个配置了snapshot版本发布的信息;
2、在settings.xml文件中<Servers>标签下增加账号信息,使其能通过Nexus的安全验证获取到发布权限:
<server>
<id>maventest-release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>maventest-snapshot</id>
<username>deployment</username>
<password>deployment123</password>
</server>
注意:这里的id要与上面的id值相同;
3、发布:
运行mvn deploy命令或者在eclipse中运行mvn时,Goals中填写“clean deploy”后运行,然后查看Nexus私服对应的仓库就有相应的信息;
四、权限管理:
对于有多个项目的情况下,需要每个项目分别建仓库,分别把项目提交到对应的仓库下,需要对每个仓库分别做用户和权限控制,每个人只能提交到与自己相关的项目的仓库下而不会对别人的项目的仓库造成破坏;
1、新建项目仓库Repositories:
打开Repositories标签,单击Add按钮添加Hosted Repository仓库(分别针对release版本和snapshot版本分别建两个仓库),输入仓库ID, 仓库Name,选择类型(release还是snapshot),Deployment Policy中选择Allow ReDeploy,然后点击Save按钮保存;如下图所示:
2、新建权限Privilege:
切换到Privileges标签,单击“Add”按钮,在下面的窗口中输入权限名称,权限描述信息,Repository中选择该权限应用的仓库,Repository Target中选择“All(Maven2)”,点击Save按钮提交;如下图所示:
3、新建规则Roles:
切换到Roles标签,单击Add按钮,在下面的窗口中输入RoldId, RoldName, Description,并在Privilege manager列表中单击Add按钮,在弹出的窗口中选择刚才增加的权限Privilege,最后点击Save提交,如下图所示:
4、新建用户users:
切换到Users页签,单击Add按钮,在下面的窗口中输入UserId, FirstName, LastName, Email,Status中选择“Active”,输入密码,在Role Managent列表中单击Add按钮,选择刚才增加的Role规则,最后单击Save按钮保存,如下图所示:
5、修改项目POM.xml中的提交地址:
修改POM.xml中的url地址为刚才增加的仓库地址:
<distributionManagement>
<repository>
<id>maventest-release</id>
<name>maven test release repository</name>
<url>http://localhost:8081/...../polabear-release/</url>
</repository>
<snapshotRepository>
<id>maventest-snapshot</id>
<name>maven test snapshots repository</name>
<url>http://localhost:8081/....../polabear-snapshot/</url>
</snapshotRepository>
</distributionManagement>
6、修改settings.xml中的用户名和密码:
修改其中的userName和password为刚才建立的仓库分配的用户名和密码,如下:
<server>
<id>maventest-release</id>
<username>polabear</username>
<password>polabear123</password>
</server>
<server>
<id>maventest-snapshot</id>
<username>polabear</username>
<password>polabear123</password>
</server>