Maven仓库—Nexus环境搭建及简单介绍

 

Maven仓库—Nexus环境搭建及简单介绍



1.    环境搭建

  1.1  下载

    http://www.sonatype.org/nexus/

    NEXUS OSS [OSS = Open Source Software,开源软件——免费]

    NEXUS PROFESSIONAL -FREE TRIAL [专业版本——收费]。

    所以选择NEXUS OSS

    


    找到Download andInstall Nexus OSS。下载ZIP的即可:

       

 

  1.2  配置

    将下载的ZIP包解压,得到如下目录:

    


    将Nexus的bin目录添加到Path环境变量中:

    


    将Nexus与当前使用的JDK的关联,修改如下的配置文件即可,目录为,

    ${ Nexus_HOME }/bin/jsw/conf/wrapper.conf。如下图:

    


    到此配置完毕,然后,即可在本地访问Nexus,如出现下图就表示配置成功:

    


2.    Nexus中的仓库


  2.1  类型介绍

    登陆Nexus,在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository。

    这里简单介绍下几种repository的类型:

    Ø  hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。

    Ø  proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。

    Ø  group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

    


  2.2  管理本地仓库

    我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:

  Releases:

     这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.

  Snapshots:

     这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.

  3rd Party:

    顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。


  2.3  在Nexus为自己的项目手动单独建库

    建库,Add-- >HostedRepository

    


    建权限

    


    建角色(指定权限)

    


    建用户(指定角色)

    


  2.4  Maven仓库组

    通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可。如下图:

    


    仓库组默认包含本地仓库Releases,snapshots, 3rd party和代理仓库MavenCentral. 你可以在Configuration配置页添加仓库到这个仓库组. 如果需要你还可以创建一个仓库组,在Repositories菜单处选add-->Repository Group即可


3.    项目中配置Nexus仓库

  如果只有一个项目,可以配置在项目的pom文件中:

  


  如果有多个项目都使用Nexus的配置,可以将如上皮遏制放到Maven的Settings文件中:

  


4.    配置仓库镜像

  默认的,如果本地仓库找不到依赖的构件,这时需要东西时先到Nexus上找,如果发现Nexus服务关闭后,会自动到中央仓库找。

  如果我们想覆盖中央仓库的默认地址,强制依赖的东西都到Nexus中去找,即使Nexus关闭也不会到中央工厂去下载:

  修改Maven的Settings文件:

  


  注意,如果本地仓库有东西,但Nexus中没有,需要将该东西考到Nexus仓库中,然后更新仓库索引:

  


一、首先在IDE中配置maven的localrepository与settings.xml的路径:


  

二、然后看settings.xml的核心配置:


  2.1 地仓库必须配置

[html]  view plain  copy
  1. <!-- 设置本地仓库路径 -->  
  2. <localRepository>/Users/user/Work/m3/repository</localRepository>  

  2.2 远程仓库之中央仓库可选择性配置

      因为maven本身已经配置了中央仓库(${M2_HOME}/lib/maven-2.0.10-uber.jar ,打开该文件,能找到超级POM:/org/apache/maven/project/pom-4.0.0.xml ,它是所有MavenPOM的父POM,所有Maven项目继承该配置),但是由于服务器在国外,比较慢,所以我们可以配置一个国内的镜像仓库:

  2.3 远程仓库之私服(nexus必须配置,可以配置在settings.xml文件,也可以配置在项目的pom文件中(一般配在pom中,比较灵活)。至于如何在settings.xml中与pom中配置远程仓库,下面会给出示例。

  注:配置远程仓库都是为了从仓库拉取jar用的,与上传(deploy)无关;而且还要注意如下相关配置,表示是否可以拉去snapshots/releases版本的jar包。

  一般规则为这样:如果是外部远程仓库(例如中央仓库)一般releases配true,snapshots配false,防止由于snapshots版本组件由于不稳定引发问题。如果是本地开发时用的私服,我们都配成true即可,方便开发。需要注意,snapshots默认是为false的,如果开发的时候想下载snapshots类型的组件,必须显式配置为true

[html]  view plain  copy
  1. <releases>  
  2.     <enabled>true</enabled>  
  3. </releases>  
  4. <snapshots>  
  5.     <enabled>false</enabled>  
  6. </snapshots>  

  2.4  上面配置的中央仓库还有nexus都是拉取组件用的,如果想上传(deploy组件到远程仓库,需要配置两步:

  (1)在项目的pom中配置distributionManagement节点,如下:

[html]  view plain  copy
  1. <distributionManagement>  
  2.     <repository>  
  3.         <id>acfunRepo</id>  
  4.         <url>http://nexus.acfun.tv/nexus/content/repositories/AcFun-Release/</url>  
  5.     </repository>  
  6.     <snapshotRepository>  
  7.         <id>acfunRepo</id>  
  8.         <url>http://nexus.acfun.tv/nexus/content/repositories/AcFun-Snapshot/</url>  
  9.     </snapshotRepository>  
  10. </distributionManagement>  

  (2)在settings.xml文件中配置所上传到的仓库的用户名密码(server节点)

[html]  view plain  copy
  1. <servers>  
  2.     <server>  
  3.         <id>acfunRepo</id>  
  4.         <username>acfun</username>  
  5.         <password>acfun123</password>  
  6.     </server>  
  7. </servers>  

  这里需要特别注意: server.id  必须与 pom 中配置 distributionManagement 下的 repository.id 相同 ,如上面都为 acfunRepo

 

三、下面介绍如何在settings.xml中与pom中配置远程仓库【接上面的2.3】

  这里的远程仓库一般指的是中央仓库或者私服,是拉取组件用的仓库。二者都既能配置在settings.xml文件,也可以配置在项目的pom文件中。但是,如果配置中央仓库,则建议配置在settings文件中,方便大家共用;如果配置私服(nexus),则建议配置在项目的pom中,方便保持项目的灵活性。

  下面则以私服(nexus)为例,展示分别在settings.xml中与pom中的配置方法:

  3.1 在pom中配置(比较简单)

[html]  view plain  copy
  1. <project>  
  2.     ......  
  3.     <repositories>  
  4.         <repository>  
  5.             <id>acfunnexus</id>  
  6.             <url>http://nexus.acfun.tv/nexus/content/groups/public/</url>  
  7.             <layout>default</layout>  
  8.             <releases>  
  9.                 <enabled>true</enabled>  
  10.             </releases>  
  11.             <snapshots>  
  12.                 <enabled>true</enabled>  
  13.             </snapshots>  
  14.         </repository>  
  15.     </repositories>  
  16.     ......  
  17. </project>  

  3.2 在settings.xml中配置(需要两步)

  它不支持pom中的中的<repositories>及<pluginRepositories>元素,所以我们需要利用profileactiveProfile节点来完成,如下:

[html]  view plain  copy
  1. <settings>    
  2.   ...     
  3.   <profiles>    
  4.     <profile>    
  5.       <id>dev</id>    
  6.       <!-- repositories and pluginRepositories here-->    
  7.     </profile>    
  8.   </profiles>    
  9.   <activeProfiles>    
  10.     <activeProfile>dev</activeProfile>    
  11.   </activeProfiles>    
  12.   ...     
  13. </settings>   

四、总结


pom中主要仓库配置如下:

[html]  view plain  copy
  1. <project>  
  2.     ......  
  3.     <!-- deploy组件的仓库配置,注意id需要与settings.xml中的server节点的id匹配-->   
  4.     <distributionManagement>  
  5.         <repository>  
  6.             <id>acfunRepo</id>  
  7.             <url>http://nexus.acfun.tv/nexus/content/repositories/AcFun-Release/</url>  
  8.         </repository>  
  9.         <snapshotRepository>  
  10.             <id>acfunRepo</id>  
  11.             <url>http://nexus.acfun.tv/nexus/content/repositories/AcFun-Snapshot/</url>  
  12.         </snapshotRepository>  
  13.     </distributionManagement>  
  14.       
  15.     <!-- 拉去组件的私服(nexus)仓库配置-->   
  16.     <repositories>  
  17.         <repository>  
  18.             <id>acfunnexus</id>  
  19.             <url>http://nexus.acfun.tv/nexus/content/groups/public/</url>  
  20.             <layout>default</layout>  
  21.             <releases>  
  22.                 <enabled>true</enabled>  
  23.             </releases>  
  24.             <snapshots>  
  25.                 <enabled>true</enabled>  
  26.             </snapshots>  
  27.         </repository>  
  28.     </repositories>  
  29.     ......  
  30.   
  31. </project>  


settings.xml中的主要配置:

[html]  view plain  copy
  1. <settings>  
  2.   
  3.     ......  
  4.       
  5.     <!-- 本地仓库配置-->   
  6.     <localRepository>/Users/user/Work/m3/repository</localRepository>  
  7.       
  8.     <!-- deploy组件的仓库server的身份验证配置,注意id需要与pom中的distributionManagement节点的repository.id匹配-->   
  9.     <servers>  
  10.         <server>  
  11.             <id>acfunRepo</id>  
  12.             <username>acfun</username>  
  13.             <password>acfun123</password>  
  14.         </server>  
  15.     </servers>  
  16.       
  17.     <!-- 配置国内的中央镜像仓库(可以不配置)-->   
  18.     <profiles>    
  19.         <profile>    
  20.             <id>chinaCentralRepo</id>    
  21.             <repositories>  
  22.                 <repository>  
  23.                     <id>maven-net-cn</id>  
  24.                     <name>MavenChinaMirror</name>  
  25.                     <url>http://repo2.maven.org/maven2/</url>  
  26.                     <releases>  
  27.                         <enabled>true</enabled>  
  28.                     </releases>  
  29.                     <snapshots>  
  30.                         <enabled>false</enabled>  
  31.                     </snapshots>  
  32.                 </repository>  
  33.             </repositories>  
  34.             <pluginRepositories>  
  35.                 <pluginRepository>  
  36.                     <id>maven-net-cn</id>  
  37.                     <name>MavenChinaMirror</name>  
  38.                     <url>http://repo2.maven.org/maven2/</url>  
  39.                     <releases>  
  40.                         <enabled>true</enabled>  
  41.                     </releases>  
  42.                     <snapshots>  
  43.                         <enabled>false</enabled>  
  44.                     </snapshots>  
  45.                 </pluginRepository>  
  46.             </pluginRepositories>  
  47.         </profile>  
  48.     </profiles>  
  49.         
  50.     <activeProfiles>    
  51.         <activeProfile>chinaCentralRepo</activeProfile>    
  52.     </activeProfiles>  
  53.       
  54.     ......  
  55. </settings>  






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值