使用nexus搭建maven的私有库

来源:互联网 发布:mac ps cs6永久序列号 编辑:程序博客网 时间:2024/04/30 09:15

我们都知道通过maven来进行jar包管理和打包部署是很方便的,尤其是maven的依赖包管理是十分的方便。通常我们在创建一个maven项目的时候会有一个pom文件,所有的pom文件都会继承maven里面的超级pom文件,在Maven的安装文件中自带了中央仓库的配置($M2_HPME/lib/maven-model-builder.jar),你可以在里找\org\apache\maven\project\pom-4.0.0.xml 这个文件,在这个文件里面定义了默认中央仓库的地址:

  1. <repositories>     
  2.   <repository>     
  3.     <id> central</id>     
  4.     <name> Maven Repository Switchboard</name>     
  5.     <layout> default</layout>     
  6.     <url> http://repo.apache.maven.org/maven2</url>     
  7.     <snapshots>     
  8.       <enabled> false</enabled>     
  9.     </snapshots>     
  10.   </repository>     
  11. </repositories> 

 但是maven默认的这个中央仓库比较慢而且不包含很多第三方的jar包,比如团队里面自己包装的jar包就没有办法通过中央仓库获取到,这个时候我们可以搭建一个自己团队内部使用可以快速访问并且可以维护自己jar包的这么一个仓库。

   这里我们使用的是nexus OSS,这里给出的配置操作是在Linux下面完成的,最好系统已经安装了maven和jdk,jdk的版本是1.7以上。

下载安装

最新nexus下载地址: http://www.sonatype.org/nexus/go

解压后会在同级目录中,出现两个文件夹: nexus-oss-webapp-1.8.0 和 sonatype-work ,前者包含了nexus的运行环境和应用程序,后者包含了你自己的配置和数据。 

$ mkdir nexus$ tar xzvf /home/jili/nexus-2.7.0-05-bundle.tar.gz$ lsnexus-2.7.0-05  sonatype-work

启动nexus

$ cd bin/$ lsjsw  nexus  nexus.bat$ ./nexusUsage: ./nexus { console | start | stop | restart | status | dump }$ ./nexus startStarting Nexus OSS...Started Nexus OSS.

配置nexus


    Nexus仓库

    nexus的仓库类型分为以下四种:

              group: 仓库组

              hosted:宿主

             proxy:代理

             virtual:虚拟


PublicRepositories:  仓库组

                  3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库

                  Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库

                  Central: 用来代理maven中央仓库中发布版本构件的仓库

                  Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库

                  Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库

                  Releases: 用来部署管理内部的发布版本构件的宿主类型仓库

                 Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库



访问网址: http://yourhostname:8081/nexus

右上角以admin登陆,默认用户名/密码:admin/admin123。

3rd party、Snapshots、Releases这三个,分别用来保存第三方jar、项目组内部的快照、项目组内部的发布版.

开启远程索引

    新搭建的neuxs环境只是一个空的仓库,需要手动和远程中心库进行同步,nexus默认是关闭远程索引下载,最重要的一件事情就是开启远程索引下载。登陆nexus系统,默认用户名密码为admin/admin123。

点击左边Administration菜单下面的Repositories,找到右边仓库列表中的三个仓库Apache Snapshots,Codehaus Snapshots和Maven Central,然后再没有仓库的configuration下把Download Remote Indexes修改为true。如下图


    然后在Apache Snapshots,Codehaus Snapshots和Maven Central这三个仓库上分别右键,选择Repari Index,这样Nexus就会去下载远程的索引文件。


    这样设置以后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以却换到Browse Index


    在左边菜单栏里面有个Artifact Search, 在输入框里面输入你想要搜索的构件名字,比如:maven, 那么查询结果如下:


    4.2建立宿主仓库

    新 建公司的内部仓库,步骤为Repositories –> Add –>Hosted Repository,在页面的下半部分输入框中填入Repository ID和Repository Name即可,比如分别填入zfy 和 zfy repostiory,另外把Deployment Policy设置为Allow Redeploy,点击save就创建完成了。

这里我点击添加宿主类型的仓库,在仓库列表的下方会出现新增仓库的配置,如下所示:




    点击save按钮后就会在仓库列表中看到刚才新增的仓库。

 

 

    4.3、创建Nexus仓库组

    Nexus 中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据 groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者 proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。

    neuxs- 1.9.2.3中默认自带了一个名为“Public Repositories”组,点击该组可以对他保护的仓库进行调整,把刚才建立的公司内部仓库zfy repostiory加入其中,这样就不需要再在maven中明确指定内部仓库 的地址了。同时创建一个Group ID为public-snapshots、Group Name为Public SnapshotsRepositories的组,把Apache Snapshots、Codehaus Snapshots、Snapshots和zfy repostiory加入其中。






    到这里neuxs的安装配置就完成了,下面介绍如何在maven中使用自己的私服。

 

 

 

    4.4、创建Nexus代理仓库

    点击菜单栏上的Add按钮后选择Proxy Repository,看到如下所示配置界面:




手动添加第三方jar

将第三方的jar上传到nexus上面:

点击Upload Artifact(s)按钮提交后即上传。

查看上传的jar包如下:

在项目中使用私服的jar包配置pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.vclk.mkt.crawler</groupId>  <artifactId>MarketingCrawler</artifactId>  <packaging>jar</packaging>  <version>0.3</version>  <name>MarketingCrawler</name>  <url>http://maven.apache.org</url>  <!-- 仓库地址 -->  <repositories>      <repository>          <id>nexus</id>          <name>Team Nexus Repository</name>          <url>http://yourhostname:8081/nexus/content/groups/public</url>      </repository>  </repositories>    <!-- 插件地址 -->  <pluginRepositories>      <pluginRepository>          <id>nexus</id>          <name>Team Nexus Repository</name>          <url>http://yourhostname:8081/nexus/content/groups/public</url>      </pluginRepository>  </pluginRepositories>  <!-- jar -->  <dependencies>      <dependency>          <groupId>de.innosystec</groupId>          <artifactId>java-unrar</artifactId>          <version>0.5</version>      </dependency>  </dependencies></project>
这样在我们的maven工程里面就添加了一个自己的私有maven库,这个时候如果你使用idea,通过import maven dependency首先会从你的私有库里面寻找依赖,如果获取不到则会到maven默认的central仓库里去寻找,这里要注意的是maven默认自带的中央仓库的ID和名称是central,如果在上述pom的配置文件中你的私有仓库id是central,则会覆盖maven自带的central仓库配置,即如下配置

    

  <!-- 仓库地址 -->  <repositories>      <repository>          <id>central</id>          <name>Team Nexus Repository</name>          <url>http://yourhostname:8081/nexus/content/groups/public</url>      </repository>  </repositories>    <!-- 插件地址 -->  <pluginRepositories>      <pluginRepository>          <id>central</id>          <name>Team Nexus Repository</name>          <url>http://yourhostname:8081/nexus/content/groups/public</url>      </pluginRepository>  </pluginRepositories>

这样的话maven在寻找依赖的时候则会全部请求私有仓库。最好是在public repository group里包含 central和你的宿主仓库,通过上面更新central仓库的索引你就相当于在你的私服上面获取了最新的jar包索引文件,你的宿主仓库全部包含团队自己的jar包和pom描述文件,这样基本上就可以覆盖整个团队的使用了。如果私服是在局域网内,可以加快访问。

0 0
原创粉丝点击