一、什么是私服
私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库,架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。
如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
以下是有无私服的对比:
二、Nexus下载与安装
Nexus安装的先决条件:
不管是NexusOpen Source还是Nexus Professional,因为基于JAVA开发,所以需要JRE运行环境。
下载Nexus:
Nexus有2个版本,Nexus Open Source 和 NexusProfessional。
NexusOpen Source是可基于EPL协议免费使用修改分发的全功能仓库管理系统。Nexus Professional主要用于需要复杂大型企业或组织。
本文只介绍NexusOpen Source,下文简称Nexus。
Nexus下载地址,有完整版,有war版。前者可以单独运行为一个基于jetty的服务,后者是运行在ServletConstainer的Web应用。
安装Nexus
安装Nexus非常简单。解压下载的文件到任意目录,不过要小心权限问题已经Windows下带空格文件夹引起的问题。然后配置NEXUS_HOME。
解压出来的目录下除了nexus外,还有一个sonatype-work文件夹。这个文件夹包含了所有nexus的仓库以及配置数据,这么做使得更加容易更新到新版的nexus。当然,这个目录的路径也能通过NEXUS_HOME/conf/nexus.properties修改
1. 下载Nexus
官网http://www.sonatype.org/nexus/ 下载最新的Nexus。
2. Bundle方式安装Nexus
- 首先看下解压后的目录,结构:解压后存在两个文件夹:nexus-2.4.0-01(不同版本版本号不同)和sonatype-work。nexus-2.4.0-01: 该目录包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等。sonatype-work:该目录包含Nenus生成的配置文件、日志文件、仓库文件等。第一个目录是运行Nexus必须的,而第二个不是必须的,Nexus会在运行的时候动态创建该目录。
3. 运行Nexus
- 当你运行Nexus时,你实际运行的是一个运行在0.0.0.0:8081的web server。Nexus运行在一个Jetty的servlet容器内,然后通过一个本地的封装服务Tanuki Java Service Wrapper来启动。它可以通过配置将nexus运行为一个unix或者windows的一个服务。bin目录下的nexus或者nexus.bat就是服务的起点,通过你的系统来选择对应的版本。
- 配置Path,启动Nexus(在windows操作系统上)首先在环境变量path下加入如下地址:C:\nexus\nexus-2.6.2-01-bundle\nexus-2.6.2-01\bin;之后在cmd下启动Nexus服务,启动成功后,可以打开打开浏览器访问http://localhost:8081/nexus 就可以看到Nexus的界面了。8081为默认的端口号,要修改端口号可进入nexus-2.1.2-bundle\nexus-2.1.2\conf\打开nexus.properties文件,修改application-port属性值就可以了,这时你可以单击界面右上角的Login进行登录,Nexus默认管理用户名和密码为admin/admin123。
- 在linux上切换到/opt/nexus/nexus-2.14.0-01/bin目录下,存在nexus及nexus.bat文件,可以使用./nexus start 启动nexus,这时候可能会报错。
-
这时候提示:
WARNING – NOTRECOMMENDED TO RUN AS ROOT
If you insist running as root, then set theenvironment variable RUN_AS_USER=root before running this script.
大概意思就是要在环境配置export RUN_AS_USER=root,临时配置
在命令行下输入:
export RUN_AS_USER=root
然后执行,就不会再提示了
./nexus start
也可以在系统里面永久配置
vi /etc/profile 加入export RUN_AS_USER=root
4. 配置Nexus为服务
启动后,你就能通过浏览器访问http://localhost:8081/nexus
当你把Nexus用于生产环境时,你应该将Nexus配置为一个服务,让他在后台运行以及在服务器重启后恢复服务。方法是 bin/nexus start
三、常用功能
Nexus常用功能就是:指定私服的中央地址、将自己的Maven项目指定到私服地址、从私服下载中央库的项目索引、从私服仓库下载依赖组件、将第三方项目jar上传到私服供其他项目组使用。
开启Nexus服务后访问url地址http://localhost:8081/nexus, (推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.
仓库类别:
开启Nexus服务后访问url地址http://localhost:8081/nexus/(推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.
最频繁的就是点击左侧菜单栏的Repositories按钮
仓库类别:
Hosted代表宿主仓库,用来发布一些第三方不允许的组件,其中自带仓库类型中3rd一般用来发布第三方无法在中央仓库获取的jar包,比如oracle的jdbc的jar包,Releases一般存放公司内的封版的项目,Snapshots用来存放正在开发的版本。
Proxy代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等。如果构建的Maven项目本地仓库没有依赖包,那么就会去这个代理站点去下载,那么如果代理站点也没有此依赖包,就回去远程中央仓库下载依赖,这些中央仓库就是proxy。代理站点下载成功后再下载至本机。笔者认为,其实Maven这个自带的默认仓库一般情况下已经够大多数项目使用了。
group 仓库是一个“仓库组”,为开发人员便于开发设置的仓库,可以将多个已存在的其他仓库配置其中提供给大家使用,在nexus中配置的时候注意的是左侧是配置仓库组使用的仓库。
virtual仓库是用于提供中央仓库中M1格式的发布版本的构件镜像仓库,即在当此M2仓库中为M1格式的仓库构件缓存提供出来的。
maven项目索引
下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能
例如:
就可以检索出它的相关信息,包括怎么配置依赖信息。我们要想使用这个私服仓库,先在项目pom中配置相关私服信息
四、使用配置
以下为在pom中声明指定使用私服的方式:
指定仓库
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.1.103:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
指定插件仓库
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.1.103:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
这样只有本项目才在私服下载组件
总:
在pom.xml配置私服下载如下:
在setting.xml配置私服下载如下:
这样这个Maven项目构建的时候会从私服下载相关依赖,当构建项目的时候,maven会从私服将构件下载到本地仓库,当然这个配置仅仅是在此项目中生效,对于其他项目还是不起作用。如果相对Maven的其他项目也生效的话。需要修改全局的settings.xml文件。
修改settings.xml为
<profiles>
……………
<profile>
<id>myprofile</id>
<repositories>
<repository>
<id>central</id>
<url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
……………
<profiles>
追加激活profile
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>
之后所有本机的Maven项目就在私服下载组件。
五、上传
分别选中填写信息就最后Upload构件就可以了
deploy命令部署构件到Nexus
- 在POM中配置
<project>
...
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8081/nexus/content/repositories/MyUserReposSnapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<url>http://localhost:8081/nexus/content/repositories/MyUserReposRelease/</url>
</repository>
</distributionManagement>
...
</project>
settings.xml中配置认证信息,Nexus的仓库对于匿名用户是只读的。
<servers>
<server>
<id>user-snapshots</id>
<username>lb</username>
<password>123456</password>
</server>
<server>
<id>user-releases</id>
<username>lb</username>
<password>123456</password>
</server>
</servers>
注意Respository中的id一定要和server下的id一致,切记!!否则出现权限问题。
然后运行发布
mvn clean deploy
在控制台发布成功
然后进入到私服上的仓库中,看一下确实存在刚刚发布的项目