文章目录
  1. 1. Maven仓库的两个概念:本地仓库和远程仓库

Maven仓库的两个概念:本地仓库和远程仓库

Maven仓库的两个概念:本地仓库和远程仓库

  

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。

Maven缺省的本地仓库地址为${user.home}/.m2/repository
。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml配置这个地址:

Xml代码

    
   …      
   D:\java\repository    
   …      
    \

如果你想让所有的用户使用统一的配置那么你可以修改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这个文件,在这个文件里面定义了中央仓库的地址:

    \

       
       central    
       Maven Repository Switchboard    
       default    
       http://repo1.maven.org/maven2    
           
           false    
           
       
    
在POM中配置远程仓库

  

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

    
…      
       
           
           maven-net-cn    
           Maven China Mirror    
           http://maven.net.cn/content/groups/public/    
               
               true    
               
               
               false    
               
           
       
       
           
           maven-net-cn    
           Maven China Mirror    
           http://maven.net.cn/content/groups/public/    
               
               true    
               
               
               false    
                         
           
       
…      
  
这里我们可以看到,允许配置多个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:

    
   …      
       
           
           myProfiel    
           及–>    
           
       
       
       myProfiel     
       
   …      
    \

这里通过<activeProfile>元素来激活这个profile,这样我们就可以全局的使用这个配置,不再需要为每个POM做重复的配置了。

在实际的操作过程中,这里我们最好不要配置远程仓库,最好能够通过nexus建立公司或者组织自己的仓库,然后这把把地址指向自己的仓库,后面我会介绍为什么要这么做,怎么做。

  

配置镜像

  

如果你想覆盖中央仓库的默认地址,那么这里我们就会使用的镜像了,还在setting.xml里面配置:

    
…      
       
           
           maven-net-cn    
           Maven China Mirror    
           http://maven.net.cn/content/groups/public/    
           central    
           
       
…      
    \

这里解释一下<mirrorOf>,表示只为central仓库做镜像,如果想为所有的仓库做镜像那么可以改为:<mirrorOf>*</mirrorOf>

文章目录
  1. 1. Maven仓库的两个概念:本地仓库和远程仓库