码迷,mamicode.com
首页 > 其他好文 > 详细

Maven仓库(转载)

时间:2015-06-19 18:14:42      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

    在以前使用Ant的时候,我们会建立一个lib目录在存放我们的jar包,比如项目所依赖的第三方包,每建立一个项目都要建立一个lib,不停的做copy工作,不仅是对于磁盘的浪费,而且也造成了版本管理上的麻烦。而且我们还需要通过提交到svn上来对lib进行管理,但是svn对于这种二进制文件的管理并不出色。

    Maven仓库的初中就是为了解决这个问题,是所有常用的第三方包的集中营。这样所有的Maven项目就可以从这个仓库中获取所需要的资源,Maven仓库中对jar通过Group Id, Atifact Id, version 来管理,所以Maven项目可以很方便的进行依赖管理。你不需要自己来管理这个庞大的资源仓库,当然你可以创建一个公司层面的仓库管理器,这个我在这个章节的后面会介绍。

    Maven仓库的两个概念:本地仓库和远程仓库  
    本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。 
    Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml配置这个地址: 

Xml代码 

<settings>   

  „   
  <localRepository>D:\java\repository</localRepository>  

   „   
</settings>   
如果你想让所有的用户使用统一的配置那么你可以修改Maven主目录下的setting.xml:  ${M2_HOME}/conf/setting.xml  
还可以通过在运行时指定目录,但是并不推荐这么做:

    mvn clean install -Dmaven.repo.local=/home/juven/myrepo/  当我们创建一个简单的Maven项目后(只需要在pom.xml配置好依赖),运行mvn clean install就可以把项目构建好,不需要我们手工下载任何jar,这全靠中央仓库的存在,它会自动从仓库下载。这个仓库的定义是在 ${M2_HOME}/lib/maven-2.0.10-uber.jar里面。你可以在里面找到 \org\apache\maven \project\pom-4.0.0.xml这个文件,在这个文件里面定义了中央仓库的地址:  

    <repositories>  

         <repository>     

           <id>central</id>    

             <name>Maven Repository Switchboard</name>    

              <layout>default</layout>  

              <url>http://repo1.maven.org/maven2</url>    

             <snapshots> 

            <enabled>false</enabled> 

           </snapshots>  

         </repository>  

  </repositories>    

     在POM中配置远程仓库   下面我介绍下如何在pom.xml里面配置远程仓库,我们需要在什么时候配置远程仓库呢?当你连接中央仓库的速度比较慢时,或者你为你的公司搭建了自己的仓库,比如Nexus仓库管理(后面我会介绍),又或者你苏需要的jar存在另外一个公共仓库,比如我们配置一个国内的镜像地址: 

    

    <project>  

         „   

        <repositories>      

         <repository>        

           <id>maven-net-cn</id>       

             <name>Maven China Mirror</name>      

               <url>http://maven.net.cn/content/groups/public/</url>   

               <releases>       

              <enabled>true</enabled>  

               </releases>      

             <snapshots>      

               <enabled>false</enabled>    

              </snapshots>  

           </repository>    

         </repositories>    

 

      <pluginRepositories>    

        <pluginRepository>     

            <id>maven-net-cn</id>       

            <name>Maven China Mirror</name>    

            <url>http://maven.net.cn/content/groups/public/</url>    

              <releases>    

                 <enabled>true</enabled>         </releases>     

            <snapshots>    

                <enabled>false</enabled>     

            </snapshots>        

               </pluginRepository>  

        </pluginRepositories> 

       „   

    </project>

 

     这里我们可以看到,允许配置多个repository和 plugin repository, <releases><enabled>true</enabled>< /releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots> 告诉Maven不要从这个仓库下载snapshot版本的构件,之所以不让你从这个仓库下载snapshot版本,是因为这些版本是不稳定的,但是 snapshot版本在我们内部项目开发的时候可是作用巨大,后面的问文章我会讨论这个问题。至于 <pluginRepositories>,这是配置Maven从什么地方下载插件构件,Maven的所有行为都是通过插件来完成的,其内部配置与<repository>类似,这里就不多说了。   尽管pom.xml中可以方便的哦配置中央仓库,但是我并不推荐大家这么做,尤其是在大的公司中,因为一个公司会有很多的项目,如果每个项目都这样配置,那么又开始做重复的copy工作了,如何解决呢,我们往下走   在settings.xml中配置远程仓库 

 

      Pom.xml的作用范围是一个项目,一个公司不可能只做一个项目,那么为了避免重复配置,那么我们需要把一些公共信息配置在 setting.xml中。但是setting.xml中并不支持<repositories> 及<pluginRepositories>,为了解决这个问题我们使用profile: 

    <settings>

           „     

      <profiles>    

         <profile>

               <id>myProfiel</id> 

            <!—在这里加入<repositories>及<pluginRepositories>–>  

           </profile>   

        </profiles>  

        <activeProfiles>  

           <activeProfile> myProfiel </activeProfile>  

        </activeProfiles>  

        „   

     </settings> 

    这里通过<activeProfile>元素来激活这个profile,这样我们就可以全局的使用这个配置,不再需要为每个POM做重复的配置了。  在实际的操作过程中,这里我们最好不要配置远程仓库,最好能够通过nexus建立公司或者组织自己的仓库,然后这把把地址指向自己的仓库,后面我会介绍为什么要这么做,怎么做。   配置镜像   如果你想覆盖中央仓库的默认地址,那么这里我们就会使用的镜像了,还在setting.xml里面配置: 

  <settings>  

     „     

     <mirrors>    

         <mirror>     

            <id>maven-net-cn</id>  

             <name>Maven China Mirror</name>      

           <url>http://maven.net.cn/content/groups/public/</url>       

          <mirrorOf>central</mirrorOf>    

         </mirror>  

      </mirrors> 

      „   

   </settings>   

     这里解释一下<mirrorOf>,表示只为central仓库做镜像,如果想为所有的仓库做镜像那么可以改为:<mirrorOf>*</mirrorOf>   如果你看到这里,请先不要着急,实际的项目经验告诉我,只是这些还不够,我们需要更快捷和高效的管理:   利用Nexus来构建企业级Maven仓库  Nexus简介   Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块间的高效依赖开发,下面会一一描述。   虽然你可以通过中央仓库来获取你所需要的jar包,但是现实往往是存在很多问题:   网速慢,你可能需要花很长的时间来下载你所需要的jar  如果你的公司很大,有几百甚至几千人再用Maven,那么这些人都去通过中央仓库来获取jar,那么这是一个很大的资源浪费  如果存在模块之间的依赖开发,你的snapshot版本是不能够被你的伙伴很方便的获取。  在实际开发过程中,有些jar的版本可能在中央仓库里面不存在,或者更新不及时,你是获取不到这个jar的。   所有以上问题,通过Nexus这个日益流行的仓库管理器可以轻松的解决。    

Maven仓库(转载)

标签:

原文地址:http://www.cnblogs.com/sunhaoyu/p/4589221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!