任何一个构件都有唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这是Maven的仓库布局方式。

groupId/artifactId/version/artifactId-version(-classifier).packaging

对于Maven来说。仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,他首先会查看本地仓库,如果本地仓库存在此构件,则直接使用,如果本地仓库不存在此构件或需要查看是否有更新的构件版本,Maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库使用。如果本地仓库和远程仓库都没有,Maven会报错。

私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,代理所有外部的远程仓库。

Maven的安装文件自带了中央仓库的配置。解压$M2_HOME/lib/maven-2.2.1.uber.jar后访问org/apache/maven/model/pom-4.0.0.xml,可以看到以下配置:

<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repol.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

私服是一种特殊的远程仓库,它是架设在局域网内的仓库,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,他从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。

私服的优点:

  节省自己的外网带宽;加速Maven构件;部署第三方构件;提高稳定性,增强控制;降低中央仓库的负荷。

  在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。任何一个仓库声明的id都是唯一的,若其他仓库声明也是用该id,就会覆盖该仓库的配置。Maven自带的中央仓库使用的id为central。

<project>

    <repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
       <snapshots>
          <enabled>false</enabled>
       </snapshots>
     <layout>default</layout>
</repository>
</repositories> </project>

jar包版本的指定

<snapshots>/<releases>

  <enabled>true</enabled>

  <updatePolicy>daily</updatePolicy> //用来配置Maven从远程仓库检查更新的频率。默认是daily,never,always(每次构建都检查更新),interval:x(每个x分钟检查一次)为可选参数

  <checksumPolicy>ignore</checksumPolicy> //配置Maven检查检验和文件的策略

</snapshots>/</releases>

配置远程仓库的认证。settings.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致。

<settings>

    <servers>
<server>
<id>my-repo</id>
<username>username</username>
<password>password</password>
</server>
</servers> </settings>

如果仓库X可以提供仓库Y存储的所有内容,那么可以认为X是Y的一个镜像。即任何一个可以从仓库Y获得的构件,都能从它的镜像中获取。http://maven.net.cn/content/groups/publis/是中央仓库http://repol.maven.org/maven2/在中国的镜像,由于地理位置因素,该镜像往往能够提供比中央仓库更快的服务。因为可以配置Maven使用该镜像来替代中央仓库。mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。

<settings>

    <mirrors>
<mirror>
<id>maven.net.cn</id>
<name>one of the central mirrors in China</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors> </settings>

镜像更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化了Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。

<settings>

    <mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Repository</name>
<url>http://192.168.1.100/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors> </settings>

<mirrorOf>*</mirrorOf>,匹配所有Maven仓库的镜像。

<mirrorOf>external:*</mirrorOf>,匹配所有不在本机上的远程仓库。即使用localhost和file://协议的除外

<mirrorOf>repo1,repo2</mirrorOf>,匹配仓库repo1和repo2,使用逗号分隔多个远程仓库

<mirrorOf>*,!repo1</mirrorOf>,匹配所有除repo1之外的所有远程仓库

Maven在解析插件仓库元数据的时候,会默认使用org.apahce.maven.plugins和org.codehaus.mojo两个groupId。

Maven通过配置settings.xml检查groupId上的插件仓库元数据

<settings>
<pluginGroups>
<pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
</settings>

基于上述配置,Maven不仅仅会检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml

Settings的更多相关文章

  1. Maven实战:pom.xml与settings.xml

    pom.xml与settings.xml pom.xml与setting.xml,可以说是Maven中最重要的两个配置文件,决定了Maven的核心功能,虽然之前的文章零零碎碎有提到过pom.xml和s ...

  2. WCF : 修复 Security settings for this service require Windows Authentication but it is not enabled for the IIS application that hosts this service 问题

    摘要 : 最近遇到了一个奇怪的 WCF 安全配置问题, WCF Service 上面配置了Windows Authentication. IIS上也启用了 Windows Authentication ...

  3. jQuery.ajax(url,[settings])

    概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象. ...

  4. Warning: strftime(): It is not safe to rely on the system's timezone settings.

    当运行程序时,会出现如下警告: Warning: strftime(): It is not safe to rely on the system's timezone settings. You a ...

  5. elasticsearch按照配置时遇到的一些坑 [Failed to load settings from [elasticsearch.yml]]

    这里整理几个空格引起的问题. 版本是elasticsearch-2.3.0 或者elasticsearch-rtf-master Exception in thread "main" ...

  6. c# Using Settings under visual studio 2012

    1.在项目属性中的Settings的设置可以通过以下方式调用 Properties.Settings.Default.(SpecifyPropertyName) 2.添加新的Settings设置文件 ...

  7. maven全局配置文件settings.xml详解

    概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径. settings.xml文件是干什么的,为什么要配置它 ...

  8. arcgis arcengine Using environment settings

    In this topic About using environment settings Environment settings summary table About using enviro ...

  9. ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

    这篇文章是上篇文章”Expdp 导数错误 ORA-00832”的延续,前几天工作比较忙.累,直到今天才整理发出来.这个数据库实例的参数设置比较诡异其实是有原因的,由于这台数据库服务器系统是32位,数据 ...

  10. NopCommerce 增加 Customer Settings

    预期: 仿照Customer 的 Phone number enabled 和 required 增加MemberType 相关步骤如下: 1.运行站点 Admin -> Settings -& ...

随机推荐

  1. 《精通C#》委托与事件(10章)

    委托可用来解耦以及状态变化的实时通知,以及其他的一些作用,但是经验所限,目前还未遇见.网上的大多数例子都是类似于,使用委托,然后用console返回方法的返回值,有时候会在想,委托的通知如果是这样的话 ...

  2. Gerald's Hexagon

    Gerald's Hexagon Gerald got a very curious hexagon for his birthday. The boy found out that all the ...

  3. php crc32,md5,sha1,mhash测试结果

    总结:php  自带hash mhash 用于散列只能加密   扩展mcrypt 用于加解密 对文件加密有的文件会隐藏换行,或者读取方式等影响导致结果不一致. 1.crc32 php: a.系统crc ...

  4. scalac 学习

    val logEnable = false def log(msg: => String) = if (logEnable) println(msg) val MSG = "progr ...

  5. URL优化之IIS7如何开启伪静态

    iis7跟IIS6开启伪静态重写的方式不一样,iis6是在网站属性里面的ISAPI筛选器里面添加,但是iis7添加伪静态重写,需要下载一个url重写插件. II7/7.5用的是web.config配置 ...

  6. Decorate Pattern 装饰者模式

    装饰模式的定义: 动态地将责任附加到对象向,若要扩展功能,装饰模式提供了比继承更有弹性的替代方案. 遵循的设计原则是开闭原则,也是对扩展开放,对修改关闭. 下面是类图 示例代码 /** *定义被装饰者 ...

  7. hdoj 1576

    //1Y真是爽啊 题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1).  分析:根据题意a=b*x   a=m ...

  8. ubuntu 12.04 java 环境的配置

    首先从官网下载JDK 链接地址: ...sudo gedit ~/.bashrc #Java Pathexport JAVA_HOME=/home/pan60157/java/jdk1.6.0_45e ...

  9. Maven搭建SSH环境

    一.新建maven项目 选中maven-aechetype-webapp group Id一般为公司域 :Artifact Id相当于项目名称 :version不需要更改:Package不使用默认,手 ...

  10. ASP通过ADODB读取Access数据库

    <% On Error Resume Next set conn=server.createobject("adodb.connection") mypath=server. ...