maven如何修改本地仓库与中央仓库,成长路线

本文详细介绍了Maven构建过程中,本地仓库的作用、默认路径及其自定义方法,以及Maven中央仓库的配置和作用。重点讲解了如何在POM和settings.xml中配置远程仓库,以及使用profiles进行团队共享设置的技巧。
摘要由CSDN通过智能技术生成

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

比如说,你的项目配置了junit-3.8的依赖,在你运行mvn test 的 时候,Maven需要使用junit-3.8的jar文件,它首先根据坐标查找本地仓库,如果找到,就直接使用。如果没有,Maven会检查可用的远程仓 库配置,然后逐个尝试这些远程仓库去下载junit-3.8的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝 试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。

Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。

你也可以自定义本地仓库的位置,修改${user.home}/.m2/settings.xml :

Xml代码

[?](

)

<  settings  >  
    ...  
    <  localRepository  >D:\java\repository</  localRepository  >  
    ...  
</  settings  >

你还可以在运行时指定本地仓库位置:

mvn clean install -Dmaven.repo.local=/home/juven/myrepo/

还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。

了解了本地仓库,接着了解一下Maven缺省的远程仓库,即Maven中央仓库。

安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvn clean install,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的 jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。

这个Maven中央仓库是在哪里定义的呢?在我的机器上,我安装了maven-2.0.10,我可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar ,打开该文件,能找到超级POM:\org\apache\maven\project\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:

Xml代码

  1. [?](

)

<table cellpadding="0" cellspacing="0" style="border-collapse:collapse; border-spacing:1px; font-size:14px; color:rgb(68,68,68); display:block; overflow-x:auto; max-width:100%; border:0px"><tbody style=""><tr style=""><td style="padding:4px 8px; border:1px solid rgb(204,204,204)"><div class="line number1 index0 alt2" style="">1&nbsp;</div><div class="line number2 index1 alt1" style="">2&nbsp;</div><div class="line number3 index2 alt2" style="">3&nbsp;</div><div class="line number4 index3 alt1" style="">4&nbsp;</div><div class="line number5 index4 alt2" style="">5&nbsp;</div><div class="line number6 index5 alt1" style="">6&nbsp;</div><div class="line number7 index6 alt2" style="">7&nbsp;</div><div class="line number8 index7 alt1" style="">8&nbsp;</div><div class="line number9 index8 alt2" style="">9&nbsp;</div><div class="line number10 index9 alt1" style="">10&nbsp;</div><div class="line number11 index10 alt2" style="">11&nbsp;</div></td><td style="padding:4px 8px; border:1px solid rgb(204,204,204)"><div class="line number1 index0 alt2" style=""><code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">repositories</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number2 index1 alt1" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">repository</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number3 index2 alt2" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">id</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;central&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">id</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number4 index3 alt1" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">name</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;Maven&nbsp;Repository&nbsp;Switchboard&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">name</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number5 index4 alt2" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">layout</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;default&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">layout</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number6 index5 alt1" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">url</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;http://repo1.maven.org/maven2&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">url</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number7 index6 alt2" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">snapshots</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number8 index7 alt1" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;</code>&nbsp; <code style="padding:2px; font-size:13px">enabled</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;false&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">enabled</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number9 index8 alt2" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">snapshots</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number10 index9 alt1" style=""><code style="padding:2px; font-size:13px">&nbsp;&nbsp;</code>&nbsp; <code style="padding:2px; font-size:13px">&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">repository</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;&nbsp;&nbsp;</code></div><div class="line number11 index10 alt2" style=""><code style="padding:2px; font-size:13px">&lt;/</code>&nbsp; <code style="padding:2px; font-size:13px">repositories</code>&nbsp; <code style="padding:2px; font-size:13px">&gt;</code></div></td></tr></tbody></table>

关于远程仓库的配置,下面的小节我会详细解释,这里我们只要知道,中央仓库的id为central,远程url地址为http://repo1.maven.org/maven2,它关闭了snapshot版本构件下载的支持。

在POM中配置远程仓库


前面我们看到超级POM配置了ID为central的远程仓库,我们可以在POM中配置其它的远程仓库。这样做的原因有很多,比如你有一个局域网的远程仓 库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不 得不添加那个远程仓库的配置。

这里我配置一个远程仓库指向中央仓库的中国镜像:

Xml代码

[?](

)

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
<  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  >

关于的更详细的配置及相关解释,请参考:http://www.sonatype.com/books/maven-book/reference_zh/apas02s08.html。

至于,这是配置Maven从什么地方下载插件构件(Maven的所有实际行为都由其插件完成)。该元素的内部配置和完全一样,不再解释。

在settings.xml中配置远程仓库


我们知道了如何在POM中配置远程仓库,但考虑这样的情况:在一个公司内部,同时进行这3个项目,而且以后随着这几个项目的结束,越来越多的项目会开始; 同时,公司内部建立一个Maven仓库。我们统一为所有这些项目配置该仓库,于是不得不为每个项目提供同样的配置。问题出现了,这是重复 !

其实我们可以做到只配置一次,在哪里配置呢?就是settings.xml。

不过事情没有那么简单,不是简单的将POM中的及元素复制到settings.xml中就可以,setting.xml不直接支持 这两个元素。但我们还是有一个并不复杂的解决方案,就是利用profile,如下:

Xml代码 收藏代码

[?](

)

10 
11 
12 
13 
<  settings  >  
    ...  
    <  profiles  >  
      <  profile  >  
        <  id  >dev</  id  >  
        <!-- repositories and pluginRepositories here-->   
      </  profile  >  
    </  profiles  >  
    <  activeProfiles  >  
      <  activeProfile  >dev</  activeProfile  >  
    </  activeProfiles  >  
    ...  
</  settings  >

style=“padding:2px; font-size:13px”>settings  >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值