用nexus搭建maven私服

首先介绍一下背景,公司访问外网有限制,项目组大部分人员不能访问maven的central repository,所以在局域网里找一台有外网权限的机器,搭建nexus私服,而后开发人员连到这台私服上 

环境是:nexus-professional-2.11.2-0六、maven-3.3.一、jdk1.7.0_72
apache

nexus安装windows

 

为何要搭建nexus私服,缘由很简单,有些公司都不提供外网给项目组人员,所以就不能使用maven访问远程的仓库地址,因此颇有必要在局域网里找一台有外网权限的机器,搭建nexus私服,而后开发人员连到这台私服上,这样的话就能够经过这台搭建了nexus私服的电脑访问maven的远程仓库。浏览器

 

1.首先肯定咱们的环境安装好maven,jdk等必须的环境缓存

 

2.这些都准备好以后,去下载最新版本的nexus    下载地址:http://www.sonatype.org/nexus/go 服务器

 

    我本地安装的是 nexus-professional-2.11.2-06网络

 

3.打开目录nexus-professional-bundle-latest\nexus-professional-2.11.2-06\bin\jsw这个目录下面你会发现有不少系统版本的nexus环境oracle

 

   个人电脑是win7 (64)为的系统,因此我选择的是windows-x86-64这个版本,固然能够根据我的的电脑系统选择对应的版eclipse

打开一个版本你会看到以下:maven

我通常都是将nexus安装成windows服务,因此点击install-nexus.bat这个,访问http://localhost:8081/nexus/ 启动后以下页面,在右上角有个Log in 的超连接,点击登陆

1、用admin用户登录nexus 

nexus的下载和安装都很简单,网上也有不少介绍,本文就不重复了。主要介绍一下安装以后的配置 

nexus的配置须要用admin角色完成,默认的密码是admin123,进入nexus首页以后,点击右上角,进行登陆 

 

而后就能够在左边的菜单中进行配置了 

 

2、为nexus配置代理服务器 

因为这台机器须要经过代理才能访问外网,因此首先要配置代理服务器,在Administration-->Server中进行配置 



配置以后,nexus才能连上central repository,若是私服所在机器能够直接上外网,则能够省略这一步 

3、配置repository 

在Views/Repositories-->Repositories里进行配置 



nexus里能够配置3种类型的仓库,分别是proxy、hosted、group 

proxy是远程仓库的代理。好比说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,若是找不到的话,就会从远程仓库下载,而后返回给用户,至关于起到一个中转的做用 

hosted是宿主仓库,用户能够把本身的一些构件,deploy到hosted中,也能够手工上传构件到hosted里。好比说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就须要手工上传到hosted里 

group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不须要在pom中配置多个地址,只要统一配置group的地址就能够了 

nexus装好以后,已经初始化定义了一些repository,咱们熟悉以后,就能够自行删除、新增、编辑 

右边那个Repository Path能够点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还觉得是BUG,实际上是被浏览器缓存了 
url

添加代理仓库

以 Sonatype 为例,添加一个代理仓库,用于代理 Sonatype 的公共远程仓库。点击菜单 Add - Proxy Repository :

 

填写Repository ID - sonatype;Repository Name - Sonatype Repository;

 

Remote Storage Location - http://repository.sonatype.org/content/groups/public/ ,save 保存:

将添加的 Sonatype 代理仓库加入 Public Repositories 仓库组。选中 Public Repositories,在 Configuration 选项卡中,将 Sonatype Repository 从右侧 Available Repositories 移到左侧 Ordered Group Repositories,save 保存:


4、配置Central Repository的proxy 

最关键的一个配置,可能就是Central Repository的proxy配置,由于大部分的构件,都是要经过这个proxy获得的 



在安装完nexus以后,这个proxy是预置的,须要作的就是把Download Remote Indexes改成true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 

网络上有一些其余公开的maven仓库,能够用一样的办法,在nexus中设置proxy,可是并非全部maven仓库,都提供了nexus index,这种状况下,就没法创建索引了 

5、配置hosted repository 

通常会配置3个hosted repository,分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的好比ojdbc6.jar),项目组内部的快照、项目组内部的发布版 



这里并无什么特别的配置,只是Deployment Policy这个选项,通常Snapshots会配置成容许,而Releases和3rd party会设置为禁止 

6、配置group repository 

前面说过,group实际上是一个虚拟的仓库,经过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址 



这里要注意的是,放到左边的仓库,才是会被聚合的仓库。我昨天一直搞错了,把仓库都放到右边,结果group什么都没有聚合到,是一个空的仓库。。。 

7、配置用户密码 

在Security-->Users中配置,在deployment用户上点击右键,选择Set Password,而后设置一个密码,作这个操做是为了后面提交作准备 



8、在用户机器上配置settings.xml 

通过前面的7个步骤,nexus就配置好了,接下来须要在每一个开发人员的开发机器上进行配置了 

配置文件在%USER_HOME%/.m2/settings.xml 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   
  4.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  6.    
  7.   <servers>  
  8.     
  9.     <server>  
  10.         <id>nexus-snapshots</id>  
  11.         <username>deployment</username>  
  12.         <password>deployment</password>  
  13.     </server>  
  14.   
  15.   </servers>  
  16.     
  17.   <mirrors>  
  18.     
  19.     <mirror>  
  20.         <id>nexus</id>  
  21.         <name>internal nexus repository</name>  
  22.         <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>  
  23.         <mirrorOf>central</mirrorOf>  
  24.     </mirror>  
  25.       
  26.   </mirrors>  
  27.     
  28. </settings>  


这里只配置了2个元素<mirrors>和<servers> 

首先这里配置了一个id为nexus的镜像仓库,地址是前面配置的public group的URL,而后镜像目标是central 

maven里的超级pom,里面配置了这样一段: 

Xml代码   收藏代码
  1. <repositories>  
  2.     <repository>  
  3.       <id>central</id>  
  4.       <name>Central Repository</name>  
  5.       <url>http://repo.maven.apache.org/maven2</url>  
  6.       <layout>default</layout>  
  7.       <snapshots>  
  8.         <enabled>false</enabled>  
  9.       </snapshots>  
  10.     </repository>  
  11.   </repositories>  
  12.   
  13.   <pluginRepositories>  
  14.     <pluginRepository>  
  15.       <id>central</id>  
  16.       <name>Central Repository</name>  
  17.       <url>http://repo.maven.apache.org/maven2</url>  
  18.       <layout>default</layout>  
  19.       <snapshots>  
  20.         <enabled>false</enabled>  
  21.       </snapshots>  
  22.       <releases>  
  23.         <updatePolicy>never</updatePolicy>  
  24.       </releases>  
  25.     </pluginRepository>  
  26.   </pluginRepositories>  


所以,当本地的maven项目,找不到须要的构件(包括jar包和插件)的时候,默认会到central里获取 

因此咱们刚刚配置的镜像仓库,id也是central,这样本地maven项目对central repository的请求,就会转到镜像仓库上,也就是咱们设置的nexus私服上 

因为咱们在项目的pom里,不会再配置其余的<repositories>和<pluginRepositories>元素,因此只要配置一个central的mirror,就足以阻止全部的外网访问。若是pom中还配置了其余的外网仓库,好比jboss repository等,能够把<mirrorOf>改成* 

至于<servers>元素,是由于咱们把项目内部的构件上传到nexus的仓库中时,nexus会进行权限控制,因此这里须要设置权限相关的信息。注意这里的<id>nexus-snapshots</id>,和后面maven工程里的pom设置是一致的 

因为咱们这里已经屏蔽了对外网仓库的请求,因此就不须要配置代理服务器了,若是须要配置代理服务器,能够用<proxies>元素 

9、配置maven项目的pom文件 

下面是简化后的pom文件: 

Xml代码   收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.   
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.huawei.inoc.wfm.task</groupId>  
  6.     <artifactId>task-sla</artifactId>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <name>task-sla</name>  
  9.   
  10.     <!-- 配置部署的远程仓库 -->  
  11.     <distributionManagement>  
  12.         <snapshotRepository>  
  13.             <id>nexus-snapshots</id>  
  14.             <name>nexus distribution snapshot repository</name>  
  15.             <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>  
  16.         </snapshotRepository>  
  17.     </distributionManagement>  
  18.   
  19. </project>  


这里配置了<distributionManagement>元素,其中的<id>nexus-snapshots</id>,与前面说的settings.xml中的<servers>元素中的配置必须一致 

配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪一个远程仓库上,注意这里的URL填的就不是public group的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/ 

而是snapshots的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/ 

可是在nexus中,snapshots也是聚合到public group里的,因此开发人员A提交到snapshots的构件,开发人员B也能够从public group里获取到 

10、eclipse中的设置 

通过前面的配置,已经能够经过命令行进行maven操做了。不过实际开发中,通常都是使用eclipse的m2e插件,因此还须要对eclipse进行一些额外的配置 

在Preferences-->Maven-->User Settings中,点击Update Settings,加载刚才咱们对settings.xml的更改 

 

而后在Maven Repositories视图里,能够看到仓库的状况 



能够看到,从超级pom继承来的central被置灰了,不可用,后面的mirrored by nexus表示对该仓库的全部请求,都会转到镜像nexus中 

11、nexus的目录结构 

nexus会安装在%USER_HOME%/sonatype-work/nexus下,有如下目录 

 

其中的storage目录,就是构件实际存放的地址了  

相关文章
相关标签/搜索