`

四. 仓库

 
阅读更多

1.什么是仓库

    在Maven任何一个依赖、插件或者项目构建的输出,都可以成为构件。Maven统一存储所有Maven项目共享构件的这个统一位置就是仓库。

 

2.仓库的布局

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

    例如:log4j:log4j:1.2.17这一依赖对应路径为\repository\log4j\log4j\1.2.17

    其路径与坐标的大致对应关系为groupId/artifactId/version/artifactId-version.packaging

 

3.仓库的分类

    仓库分为两类:本地仓库和远程仓库。

    当Maven根据坐标寻找构件的时候,首先查看本地仓库,如果存在,直接使用;如果本地仓库不存在此构件,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库在使用。如果本地仓库和远程仓库都没有需要的构件,Maven就会报错。

特殊的远程仓库:

    •中央仓库:是Maven核心自带的远程仓库,包含了绝大部分开源的构件。

    •私服:是在局域网内架设的一个私有的仓库服务器,用其代理所有的外部的远程仓库,内部的项目还能部署到私服上供其他项目使用。

    •其他公开的远程仓库:常见的有Java.net Maven库(http://download.java.net/maven/2/)和JBoss Maven库(http://repository.jboss.org/maven2/)

 

 (1)本地仓库

    在~/.m2/settings.xml中指明了本地仓库

    Default: ~/.m2/repository

    可通过localRepository配置,例如

 

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

    注意:~/.m2/settings.xml文件是不存在的,需要从Maven安装目录 复制$M2_HOME/conf/setting.xml一份后,在进行编辑。不推荐直接修改全局setting.xml文件

 

构件进入仓库的方式:

    •从远程仓库下载

    •mvn clean install

 

(2)远程仓库

    安装好Maven后,如果不执行任何Maven命令,本地仓库目录是不存在的。当用户输入第一条Maven命令后,Maven才会创建本地仓库。

 

(3)中央仓库

    由于最原始的的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能执行Maven命令的时候下载到的构件。

    $M2_HOME/lib/maven-model-builder-3.0.4.jar,然后访问maven-model-builder-3.0.4.jar\org\apache\maven\model\pom-4.0.0.xml,可以看到如下信息:

 

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

    包含这段配置的文件是所有Maven项目都会继承的超级POM

 

    id:central 对中央仓库进行唯一标识;名称name:Central Repository;布局layout:default;snapshots-enabled-false表示不从该中央仓库下载快照版本的构件。

 

(4)私服

    私服是一种架设在局域网内的特殊的远程仓库,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。

当Maven需要下载构件的时候,它从私服请求,如果不存在,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上。

    私服的作用:

    •节省自己的外网带宽;

    •加速Maven构建

    •部署第三方构件,当某个构件无法从任何一个外部远程仓库获得,比如组织内部私有构件、Oracle的JDBC驱动。建立私服后,可以将这些构件部署到这个内部仓库中,供内部的Maven项目使用;

    •提高稳定性,增强控制

    •降低中央仓库的负荷

 

4.远程仓库的配置

    可以在POM中或setting.xml中配置该仓库内容如下:

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

id:唯一标识,注意中央仓库ID为central,如果其它的仓库声明用使用该ID,就会覆盖中央仓库的配置。

layout:表示仓库的布局是Maven2及Maven3的默认布局。

releases:子元素enabled的值为true,表示开启JBoss仓库的发布版本下载支持。

snapshots:子元素enabled的值为false,关闭JBoss仓库的快照版本下载支持。

releases和snapshots:

updatePolicy子元素配置更新频率,默认值是daily,表示Maven每天检查一次。其他值never-从不检测更新;always-每次构建都检查更新;interval:X - 每隔X分钟检查一次更新;

checksumPolicy子元素用来配置Maven检查检验和文件的策略。当构件部署到Maven仓库中时,会验证校验和文件,如果校验和验证失败,默认为warn,输出警告信息;fail,构件失败;ignore,忽略

 

(1)远程仓库的认证

    认证信息必须配置在setting.xml中

 

<settings>
  ...
  <servers>
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
  </servers>
  ...
</settings>

 

 

(2)部署至远程仓库

    需要编辑pom.xml文件

 

<project>
	<distributionManagement>
		<repository>
			<id>proj-release</id>
			<name>Proj Release Repository</name>
			<url>http://192.168.1.100/content/repository/proj-releases</url>
		</repository>
		<snapshotRepository>
			<id>proj-snapshot</id>
			<name>Proj Snapshot Repository</name>
			<url>http://192.168.1.100/content/repository/proj-snapshot</url>
		</snapshotRepository>
	</distributionManagement>
</project>

    distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本构件仓库,后者表示快照版本构件仓库。两个子元素下都需要配置id、name、url。

往远程仓库部署的时候,需要认证,配置方式就是在setting.xml中创建一个server元素,其id与仓库的id匹配,并配置正确的认证信息,下载构件和部署构件认证配置方式是一样的。

部署命令:

mvn clean deploy

 

5.快照版本

    快照主要用于组织内部协同开发时使用,如果是SNAPSHOT版本,在发布到私服的过程中会为构件打上时间戳,例如:2.1-20091214.221414-13,其他对该构件有依赖的项目的项目可以在构件时进行检查。默认情况下每天检查一次(updatePolicy进行控制),也可以使用命令行-U参数强制让Maven检查更新

mvn clean install -U

 

6.从仓库解析依赖的机制

    Maven从仓库解析并使用依赖构件的规则如下:

    (1)当依赖范围是system的时候,Maven直接从本地系统解析构件;

    (2)根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功;

    (3)在本地仓库不存在相应构件的情况下,如果依赖的版本是显示的发布版本构件,如1.2、2.1-beta-1等,则遍历所有的远程仓库,发现后,下载并解析使用;

    (4)如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或LATEST真实的值,然后基于这个真实的值检查本地或远程仓库,如步骤(2)和(3);

    (5)如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version/maven-metadata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后检查本地或远程仓库进行下载;

    (6)如果解析得到的构件版本是时间戳格式的快照,如1.41-20091104.121451-121,则复制其时间戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。

 

7.镜像

settings.xml中配置如下:

 

<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>
    mirrorOf:指向被镜像仓库的ID;另外三个元素id、name、url与一般仓库无异。

 

 

更常见的用法是结合私服

<settings>
  </mirrors>
	<mirror>
		<id>internal-repository</id>
		<name>Internal Repository Manager</name>
		<url>http://192.168.1.100/maven2/</url>
		<mirrorOf>*</mirrorOf>
	</mirror>
  </mirrors>
</settings>
    <mirrorOf>*</mirrorOf>:对于任何远程请求都会转至http://192.168.1.100/maven2/;

    <mirrorOf>external:*</mirrorOf> :匹配所有远程仓库,使用localhost的除外,使用file://的除外。也就是匹配所有不在本机上的远程仓库;

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

    <mirrorOf>*,!repo1</mirrorOf>:匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

 

8.Maven的搜索服务

(1)Sonatype Nexus

地址:https://repository.sonatype.org/index.html#welcome

Nexus是最流行的开源Maven仓库管理软件,Sonatype架设的一个Nexus仓库实例。

 

(2)Jarvana

地址:http://www.jarvana.com/jarvana/

Jarvana提供了基于关键字、类名的搜索

 

(3)中央仓库

地址:http://search.maven.org/#browse

分享到:
评论

相关推荐

    数据仓库(第四版).rar

    这本“数据仓库(第四版)”的教程可能是对这一主题的深入探讨,涵盖了数据仓库的基本原理、设计、实施以及最新发展。以下是该教程可能涉及的一些核心知识点: 1. **数据仓库定义**:数据仓库是一个集成的、非易失...

    烟花爆竹批发企业储存仓库安全管理规范.docx

    1. 库房的区域规划和外部距离 2. 新建、改建、扩建烟花爆竹储存工程项目的安全设施设计和施工 3. 储存烟花爆竹建设项目的安全设施设计和施工 4. 储存烟花爆竹的建设项目竣工投入使用前的安全设施验收 根据烟花爆竹...

    数据仓库(原书中文第四版).rar

    在《数据仓库(原书中文第四版)》中,作者深入探讨了数据仓库的设计、构建和管理。这本书可能是由多个专家合著,每一版都可能包含了最新的理论发展和技术更新。中文版的出现使得中国读者能够更方便地理解和应用这些...

    仓库管理四定位.docx

    【四号定位仓库管理系统】 四号定位是一种仓库物资管理方法,通过使用四个号码来精确标识物资在仓库中的位置。这四个号码分别是库号、架号、层号和位号,它们共同构成了物资存储的坐标系统。例如,编号为2—12—3—...

    数据结构仓库管理系统.doc

    四、源程序代码 源程序代码使用C++语言编写,包括以下几个部分: 1. 结构体定义:定义了一个名为`DataType`的结构体,包括商品编号、商品名称和商品数量三个字段。 2. 链表的定义:定义了一个名为`ListNode`的...

    数据仓库原书中文第四版

    《数据仓库》一书,特别是第四版的中文翻译,深入浅出地探讨了这一主题。本篇将基于书中的核心内容,结合Oracle数据库系统,详细介绍数据仓库的理论与实践。 首先,我们需要理解数据仓库的基本概念。数据仓库是一个...

    仓库安全管理要求,仓库建筑、储存、装运与消防设施管理.doc

    四、电源管理 1. 仓库内电器设备安装须符合电力设计规范和安全制度。 2. 化学易燃物品库房应安装防爆、隔离或密封式照明设备。 3. 电线主线应架设在库房外,引入库房的电线需用金属或硬质塑料套管保护。 4. 严禁在...

    仓库消防安全管理制度.doc

    **第四章 火源管理** 1. 仓库内严禁吸烟和使用明火,外来人员和车辆需收缴火种。 2. 动用明火需经过审批,并采取安全措施,作业后要确保无火种遗留。 3. 商品入库前应检查是否有火种,必要时隔离观察。 **第五章 ...

    数据仓库第四版

    数据仓库第四版

    仓库管理系统SQL.doc

    四、逻辑结构设计 1. 货物表:包含货物编号(主键)、货物名称、价格、数量和客户编号(外键)。 2. 供应商表:包含供应商编号(主键)、供应商名称、联系人、地址和电话号码。 3. 仓库管理员表:包含管理员编号...

    仓库消防安全管理制度.pdf

    **第四章:电源管理** 1. 电线和电器设备由专业电工安装维修,不得乱拉电线和超负荷使用。 2. 照明灯具与商品保持安全距离,工作结束后切断电源。 3. 定期检测电线绝缘,及时更新维护电器设备,禁止使用可能引发火灾...

    仓库年底工作总结800字范文四篇.doc.pdf

    仓库年底工作总结800字范文四篇.doc.pdf

    仓库管理系统(附完整说明书)

    仓库管理是与我们日常生活息息相关的问题。本文设计并实现了一个仓库管理信息系统。详细介绍了系统从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果。最后对实现系统的优缺点进行...

    (完整版)仓库货物摆放标准.doc

    四、仓库安全管理标准 仓库安全管理标准是指仓库安全管理的要求,以确保仓储安全和物流效率。主要包括: 1. 库房安全:包括人身安全、物资安全、仓库设备安全及消防等方面。 2. 防止物资发生霉变、燃烧、爆炸、水...

    仓库管理经典.docx

    #### 四、保管与储存 **1. 什么是保管?** - 保管是在保证物资质量和数量的前提下,采取合理的方式方法对物资进行保护、维护和管理的过程。 以上内容全面覆盖了仓库管理的基本概念、分类、作用及其管理的具体内容...

    第四讲 数据仓库.pptx

    第四讲 数据仓库.pptx

    库房管理人员述职报告范文四篇.docx

    库房管理人员的主要职责包括但不限于产品的入库、出库管理,确保仓库内的产品及其配件等物品的准确记录与安全存储。此外,还需要定期进行盘点,确保库存数据与实际相符,并协助相关部门处理物资发放等问题。 #### ...

    学校仓库消防安全管理制度.pdf

    四、火源管理 1. 禁止库区内吸烟和明火作业。 2. 电暖气的使用和维护由指定部门负责,不得随意挪动或覆盖。 3. 防止电暖气附近存放易燃物品,避免引发火灾。 五、消防设施 1. 仓库应按《建筑设计防火规范》配置消防...

    第四讲数据仓库.pptx

    数据仓库有四个关键特征: 1. 面向主题:数据仓库围绕特定的业务领域或主题组织,例如客户、销售或产品,提供对该领域的深度洞察。 2. 集成:来自不同数据源的数据经过清洗和转换,消除冗余和不一致性,形成统一视图...

Global site tag (gtag.js) - Google Analytics