精华内容
下载资源
问答
  • maven(七)-maven仓库

    2018-09-24 11:38:51
    一、Maven仓库定义 在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以成为构件(jar、war包等)。 Maven在某个位置上统一存储所有Maven项目共享的构件,即为Maven仓库; Maven项目不用各自存储依赖文件...

    一、Maven仓库定义

    在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以成为构件(jar、war包等)。
    Maven在某个位置上统一存储所有Maven项目共享的构件,即为Maven仓库
    Maven项目不用各自存储依赖文件,只需声明依赖的坐标,在需要时(编译、运行、打包),Maven会自动根据坐标找到Maven仓库中的构件,并使用它们。

    二、仓库的布局

    在Maven世界中,任何一个构件都有其唯一的坐标,通过坐标可以定义其在仓库中的唯一存储路径,即Maven的仓库布局方式。
    Maven构件的存储路径为:groupId/artifactId/version/artifactId-version[-classifier].packaging
    Ps(个人理解): 仓库的布局方式就是定义了坐标与构件路径的对应关系,即如何通过坐标找到构件。

    三、仓库的分类

    对Maven而言,仓库只分为两类,本地仓库、远程仓库。而远程仓库又可细分为中央仓库、私服、其他公共库。
    当Maven根据坐标寻找构件时,首先查看本地仓库,如果不存在,Maven就会去远程仓库查找并下载到本地文件。如果都没有,Maven就会报错。分类如下图

    4182729038-5ac2dd365eae9_articlex (484Ã221)

    1.本地仓库

    通常Maven项目目录下,没有诸如lib/这样存放依赖文件的目录,Maven总是基于坐标使用本地仓库的依赖文件。
    默认情况下,不论是Windows还是Linux,本地仓库的路径都为~/.m2/repository(~ 是用户目录)
    更改本地仓库路径:~/.m2/settings.xml,设置localRepository元素的值。
    如:

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

    安装构件到本地仓库:
    1)mvn clean install:构建项目输出文件并安装到本地仓库
    2)mvn install:install-file -Dfile=x -DgroupId=x -DartifactId=x -Dversion=x -Dpackaging=x
    Dfile待安装构建路径;DgroupId、DartifactId、Dversion、Dpackaging声明其在仓库中的坐标

    2. 远程仓库

    安装好Maven后,如果不执行任何Maven命令,本地仓库目录是不存在的。当用户输入第一条Maven命令之后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。
    Maven本地仓库只有一个,但可以配置多个远程仓库
    好比本地仓库是书房,远程仓库是书店,当用户需要看一本书时,如果在书房中没找到,就到书店购买并放回书房。通常一个人只有一个书房,但外面的书店有很多。

    3 .中央仓库

    由于原始的本地仓库是空,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令时下载到需要的构件。
    中央仓库就是这样一个默认远程仓库。在Maven安装文件中自带了中央仓库的配置。
    在Maven安装目录/lib/maven-model-builder-xx.jar中访问路径org/apache/maven/model/pom-4.0.0.xml。
    Ps(个人理解):pom-4.0.0.xml 与 pom.xml中<modelVersion>4.0.0</modelVersion> 应该存在某些关联
    pom-4.0.0.xml是所有Maven项目都会继承的超级POM,查看该文件,可以找到中央仓库配置。

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

    4. 私服

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

    上图展示了组织内部使用私服的情况,即使在一台直接连入Internet的个人机器上使用Maven,也应本地建立私服。
    建立私服的优点:

    节省自己的外网带宽 消除对外的重复构件下载,降低外网带宽的压力。
    加速Maven构建 不停的请求外部仓库十分耗时,Maven的一些内部机制(如快照更新检查)要求Maven在执行构建时不停地检查远程仓库数据,当项目配置很多外部远程仓库时,构建速度大大降低。使用私服,Maven只需检查局域网内私服数据,提高构建速度。
    部署第三方构建 安装组织内部生成的私有构件到私服,供内部Maven用户
    提高稳定性,增强控制 Maven构建高度依赖于远程仓库,Internet不稳定,Maven构建也会变得不稳定,甚至失败,使用私服后,即使暂时没有Internet,由于私服缓存了很多构件,Maven也能正常运行。此外,很多私服(如Nexus)软件还提供了额外的功能,如权限管理,RELEASE/SNAPSHOT区分等
    降低中央仓库的负荷 使用私服可以避免很多对中央仓库的重复下载。

    四、远程仓库的配置

    在POM中配置远程仓库

    <repositories>
        <repository>
            <id>...</id>    <!-- 仓库唯一标识,重复会覆盖上一个远程仓库 -->
            <name>...</name>    <!-- 仓库名称 -->
            <url>...</url>    <!-- 仓库地址 -->
            <releases>    <!-- 重要!控制Maven对于发布版本构件的下载 -->
                <enabled>...</enabled>    <!-- true/false 控制发布版本构件的下载 -->
                <updatePolicy>...</updatePolicy>    <!-- 更新策略 daily(默认,每天一次)、never(从不)、always(每次构建)、interval:X(间隔X分钟) -->
                <checksumPolicy>...</checksumPolicy>    <!-- 检查检验和文件的策略 warn(默认,校验失败,输出警告信息)、fail(校验失败,无法完成构建)、ignore(忽略校验失败) -->
            </releases>
            <snapshots>    <!-- 重要!控制Maven对于快照版本构件的下载 -->
                <enabled>...</enabled>    <!-- true/false 控制快照版本构件的下载 -->
                <updatePolicy>...</updatePolicy>    <!-- 更新策略 daily(默认,每天一次)、never(从不)、always(每次构建)、interval:X(间隔X分钟) -->
                <checksumPolicy>...</checksumPolicy>    <!-- 检查检验和文件的策略 warn(默认,校验失败,输出警告信息)、fail(校验失败,无法完成构建)、ignore(忽略校验失败) -->
            </snapshots>
            <layout>default</layout>    <!-- 仓库布局方式 -->
        </repository>
        ...
    </repositories>

    1.远程仓库的认证

    大部分远程仓库无须认证就可访问,但有时出于安全方面考虑,我们需要提供认证信息才能访问一些远程仓库。
    配置认证信息必须配置在settings.xml中,因为POM往往提交到代码仓库中供所有成员访问,显然,本地settings.xml更安全

    <settings>
        ...
        <servers>
            <server>
                <id>..</id>    <!-- 需要提供认证信息才能访问的远程仓库ID -->
                <username>...</username>    <!-- 用户名 -->
                <password>...</password>    <!-- 密码 -->
            </server>
        </servers>
        ...
    </settings>

    2.部署至远程仓库

    1) 编辑项目的pom.xml

    <project>
        <distributionManagement>
            <repository>    <!-- 指定发布版本构件的仓库 -->
                <id>...</id>
                <name>...</name>
                <url>...</url>
            </repository>
            <snapshotRepository>    <!-- 指定快照版本构件的仓库 -->
                 <id>...</id>
                <name>...</name>
                <url>...</url>
            </snapshotRepository>
        </distyibutionManagement>
    </project>

    2) 往远程仓库部署构件时,往往需要认证。在settings.xml中配置认证信息
    3)执行mvn clean deploy,部署到远程仓库

    五、快照版本

    在Maven世界中。任何一个项目或者构件都必须有自己的版本,而Maven又将版本分为两种:
    发布版本:稳定,格式如:1.0.0、1.3-alpha-4、2.0
    快照版本:不稳定,格式如:2.1-SNAPSHOT、2.1-20091214.221414-13

    假设:同时开发项目A、B,而项目B依赖于项目A,在项目未正式方布时,开发方案如下
    方案一:检出项目A源码进行构建。能获得项目A最新构件,但需要额外的构建操作,而且构建出问题也不好解决,低效
    方案二:重复部署项目A,版本号不变。需要清理本地仓库相同版本号的项目A构件,不然无法下载A最新构件
    方案三:不停更新版本。需要频繁修改POM文件,同时造成版本号的滥用。
    方案四:将项目A的版本设置为快照版本。

    Maven在发布项目快照版本时,会自动打上时间戳。如2.1-20091214.221414-13 表示 2009年12月14日22时14分14秒 第13次快照。通过时间戳,Maven就能找到该构件的最新快照版本。
    默认情况下,Maven会每天检查一次更新(由仓库配置的updatePolicy控制),也可通过-U命令强制更新,如mvn clean install -U

    六、从仓库解析依赖的机制

    当本地仓库没有依赖构件时,Maven会自动从远程仓库下载;当依赖版本为快照版本时,Maven会自动找到最新的快照。其依赖解析机制如下
    1)依赖范围是system,Maven直接从本地文件系统解析构件。
    2)根据依赖坐标计算仓库路径,Maven直接从本地仓库寻找构件,如果发现相应构件,则解析成功。
    3)本地仓库不存在,且依赖版本是显式的发布版本构件(1.0,1.2-beta-1),遍历所有远程仓库,发现后下载并解析使用
    4)如果依赖版本是RELEASE和LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或LATEST的真实的值,然后基于这个值检查本地和远程仓库。
    5)如果依赖版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version/maven-metadata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库和远程仓库。
    6)如果最后解析得到的构件版本是时间戳格式的快照,如1.4.1-20091104.121450-121,则复制其时间戳格式文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。

    Maven基于更新策略来检查更新,与远程仓库配置中<release>和<snapshot>中的子元素<enable>、<updatePolicy>有关,只有enable为true,才能访问该仓库对应发布版本/快照版本的构件信息,并基于updatePolicy更新策略检查更新,使用-U可以强制更新。
    当Maven检查完更新策略,并决定检查依赖版本,就需要检查仓库元数据maven-metadata.xml
    基于groupId和artifactId的maven-metadata.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <metadata>
      <groupId>org.sonatype.nexus</groupId>
      <artifactId>nexus</artifactId>
      <versioning>
        <latest>1.4.2-SNAPSHOT</latest>    <!-- 指向最新版本 -->
        <release>1.4.0</release>    <!-- 指向最新发布版本 -->
        <versions>    <!-- 版本历史记录 -->
          <version>1.3.5</version>
          <version>1.3.6</version>
          <version>1.4.0-SNAPSHOT</version>
          <version>1.4.0.1-SNAPSHOT</version>
          <version>1.4.1-SNAPSHOT</version>
          <version>1.4.2-SNAPSHOT</version>
        </versions>
        <lastUpdated>20091214221557</lastUpdated>    <!-- 记录最近更新时间 -->
      </versioning>
    </metadata>

    该XML文件列出仓库中存在的该构件的所有可用的版本,Maven通过合并多个远程仓库及本地仓库的元数据,就能计算出基于所有仓库的latest和release分别是什么,然后再解析具体的构件。
    Ps:不推荐依赖声明中使用LATEST和RELEASE,Maven随机解析到不同的构件,当构件发生变化,可能会造成项目构建失败,且不易排查。

    当依赖版本是快照版本时,Maven也需要检查更新。
    基于groupId、artifactId和version的maven-metadata.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <metadata modelVersion="1.1.0">
      <groupId>org.sonatype.nexus</groupId>
      <artifactId>nexus</artifactId>
      <version>1.4.2-SNAPSHOT</version>
      <versioning>
        <snapshot>
          <timestamp>20091214.221414</timestamp>
          <buildNumber>13</buildNumber>
        </snapshot>
        <lastUpdated>20091214221414</lastUpdated>
      </versioning>
    </metadata>

    该XML文件的snapshot元素包含timestamp和buildNumber两个元素分别代表这一快照的时间戳和构建号。并由此可以得到该仓库中此快照的最新构件版本实际为1.4.2-20091214.221414-13,通过合并所有远程仓库和本地仓库的元数据,就能知道所有仓库中该构件的最新快照。

    最后,元数据并非永远正确,当某些构件无法解析,或解析错误时,需手工或使用工具(如Nexus)对齐进行修复。

    七、镜像

    如果仓库X可以提供仓库Y存储的所有内容,那么就可以认定X是Y的一个镜像。
    举个例子,http://maven.net.cn/content/g...://repol.maven.org/maven2在中国的镜像,由于地理位置因素,使用该镜像往往能够提供比中央仓库更快的服务。

    编辑settings.xml,配置镜像

    <settings>
        ...
        <mirrors>
            <mirror>
                <id>...</id>    <!-- 镜像仓库id -->
                <name>...</name>    <!-- 镜像仓库名称 -->
                <url>...</url>    <!-- 镜像仓库地址 -->
                <mirrorOf>...</mirrorOf>    <!-- 被镜像仓库表达式: *(匹配所有远程仓库) -->
            </mirror>
        </mirrors>
        ...
    </settings>

    mirrorOf元素用来匹配被镜像仓库(有点类似于Servlet的url-pattern表达式),当你要访问的远程仓库id满足mirrorOf表示式时,就会被拦截访问镜像服务器。表达式语法如下:

    * 匹配所有远程仓库
    external:* 匹配所有远程仓库,localhost除外
    a,b 匹配a和b仓库,多个仓库用,隔开
    *,!a 匹配所有远程仓库,a除外,使用感叹号将仓库从匹配中排除

    八、仓库搜索服务

    使用Maven进行日常开发时,获取依赖需要确切的依赖坐标,通过仓库搜索服务可以根据关键字得到Maven坐标。

    Sonatype Nexus http://repository.sonatype.org 提供关键字搜索、类名搜索、坐标搜索、校验和搜索等功能,坐标和构件下载
    aliyun Nexus http://maven.aliyun.com 同上,aliyun架设的公共Nexus仓库实例,服务较快
    Jarvana http://www.jarvana.com/jarvana 提供基于关键字、类型搜索,坐标,构件下载。还支持浏览构件内部内容和便捷的Java文档浏览功能
    MVNbrowser http://www.mvnbrowser.com 只提供关键字搜索,坐标,还可查看构件依赖于那些构件(Dependencies)以及该构件被哪些其他构件依赖(Referenced By)
    MVNrepository http://mvnrepository.com 提供关键字搜索,坐标,构件下载,依赖于被依赖关系信息,构件所含信息,还能提供一个简单图表,显示某个构件各版本间的大小变化
    展开全文
  • Maven 仓库

    2020-09-28 15:58:02
    一、Maven 仓库的分类: maven的仓库只有两大类: ...maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置 2.2..

    一、Maven 仓库的分类:

    maven的仓库只有两大类:

    1.1.本地仓库

    1.2.远程仓库

    远程仓库中又分成了3种:

    •  中央仓库
    •  私服
    • 其它公共库

    二、本地仓库

    2.1定义

    就是Maven在本地存储构件的地方。注:maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建

    maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置

    2.2.maven修改本地仓库地址

    不清楚自己电脑maven安装在哪的可以打开idea--file--settings--maven 如下图

    我使用的是maven插件安装在idea的安装包默认路径下:d:/....

    我的本地仓库地址在c盘:c:/用户/用户名/.m2/repository

    当系统更新或重装系统之后 ,本地仓库就不见了 ,得重新下载比较麻烦耗时,我们可以修改默认本地仓库地址

    修改方法,如何更改maven默认的本地仓库的位置:maven的settings.xml文件中localRepository

    打开maven安装目录下的settings.xml文件修改本地配置

    在localRepository 的地方插入本地仓库配置,具体地址根据自己的情况修改

     <localRepository>M:\zoe\mvn_repository</localRepository>

    三、 远程仓库

    3.1 中央仓库

    说到远程仓库先从中央仓库 最核心的开始,中央仓库是默认的远程仓库,maven在安装的时候,自带的就是中央仓库的配置

    在maven的聚合与继承中我们说过,所有的maven项目都会继承超级pom,具体的说,包含了下面配置的pom我们就称之为超级pom

    <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>

    中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载得到。

    3.2 私服

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

    Maven私服的 个特性:

    1.节省自己的外网带宽:减少重复请求造成的外网带宽消耗

    2.加速Maven构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低

    3.部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用

    4.提高稳定性,增强控制:Internet不稳定的时候,maven构建也会变的不稳定,一些私服软件还提供了其他的功能

    5.降低中央仓库的负荷:maven中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力

    当前主流的maven私服:

    1.Apache的Archiva

    2.JFrog的Artifactory

    3.Sonatype的Nexus

    3.3远程仓库配置

    在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他远程仓库中有,如JBoss Maven仓库。这时,可以在pom.xml中配置该仓库,代码如下:

    配置远程仓库将引入新的配置元素:<repositories>     <repository>

    <repositories>元素下,可以使用  <repository>子元素声明一个或者多个远程仓库。

    例子:

    <repositories>  
            <repository>  
                <id>jboss</id>  
                <name>JBoss Repository</name>  
                <url>http://repository.jboss.com/maven2/</url>  
                <releases>  
                    <updatePolicy>daily</updatePolicy><!-- never,always,interval n -->  
                    <enabled>true</enabled>  
                    <checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->  
                </releases>  
                <snapshots>  
                    <enabled>false</enabled>  
                </snapshots>  
                <layout>default</layout>  
            </repository>  
    </repositories>

    <updatePolicy>元素:表示更新的频率,值有:never, always,interval,daily, daily 为默认值

    <checksumPolicy>元素:表示maven检查和检验文件的策略,warn为默认值

    3.4远程仓库的访问认证

    大部分公共的远程仓库无须认证就可以直接访问,但我们在平时的开发中往往会架设自己的Maven远程仓库,出于安全方面的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以直接在pom.xml中配置,但是认证信息必须配置在settings.xml文件中。这是因为pom往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只存在于本机。因此,在settings.xml中配置认证信息更为安全。

    <settings>
    ...
        <!--配置远程仓库认证信息-->
        <servers>  
            <server>  
                <id>id</id>  
                <username>username</username>  
                <password>pwd</password>  
            </server>  
        </servers>
    
    ...
    </settings>

    注:这里的id必须与POM中需要认证的repository元素的Id一致。

    上面代码我们配置了一个id为releases的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。认证用户名为admin,认证密码为admin123。这里的关键是id元素,settings.xml中server元素的id必须与pom.xml中需要认证的repository元素的id完全一致。正是这个id将认证信息与仓库配置联系在了一起。

    3.5部署构件至远程仓库

    我们使用自己的远程仓库的目的就是在远程仓库中部署我们自己项目的构件以及一些无法从外部仓库直接获取的构件。这样才能在开发时,供其他对团队成员使用。

    Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构件部署到远程仓库中。首先,需要编辑项目的pom.xml文件。配置distributionManagement元素,代码如下:

     <distributionManagement>
            <repository>
                <id>releases</id>
                <name>public</name>
                <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url>
            </repository>
            <snapshotRepository>
                 <id>snapshots</id>
                 <name>Snapshots</name>
                 <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url>
             </snapshotRepository>
    </distributionManagement>

    distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)构件的仓库,后者表示快照版本(开发测试版本)的仓库。这两个元素都需要配置id、name和url,id为远程仓库的唯一标识,name是为了方便人阅读,关键的url表示该仓库的地址。往远程仓库部署构件的时候,往往需要认证,配置认证的方式同上。

    配置正确后,运行命令mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,如果项目当前的版本是快照版本,则部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。

    3.6配置远程仓库的镜像(代理中央仓库,速度更快)

    如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。举个例子,http://maven.oschina.net/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。因此,可以配置Maven使用该镜像来替代中央仓库。编辑settings.xml,代码如下:

    <mirrors>
        <mirror>
           <id>maven.oschina.net</id>
           <name>maven mirror in China</name>
           <url>http://maven.oschina.net/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>

    该例中,mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。id表示镜像的唯一标识符,name表示镜像的名称,url表示镜像的地址。

    3.7配置私服镜像

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

    <!--配置私服镜像-->
    <mirrors> 
       <mirror>  
            <id>nexus</id>  
            <name>internal nexus repository</name>  
            <url>http://183.238.2.182:8081/nexus/content/groups/public/</url>  
            <mirrorOf>*</mirrorOf>  
         </mirror>  
     </mirrors>
    

    该例中<mirrorOf>的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://183.238.2.182:8081/nexus/content/groups/public/。如果该镜像仓库需要认证,则配置一个id为nexus的认证信息即可。

    需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

     

    四、常见的maven仓库

    5.可用的Maven镜像仓库
    
         <mirror>    
            <id>repo2</id>    
            <mirrorOf>central</mirrorOf>    
            <name>Human Readable Name for this Mirror.</name>    
            <url>http://repo2.maven.org/maven2/</url>    
          </mirror>
      
         <mirror>    
           <id>ui</id>    
           <mirrorOf>central</mirrorOf>    
           <name>Human Readable Name for this Mirror.</name>    
          <url>http://uk.maven.org/maven2/</url>    
         </mirror>
     
       
         <mirror>    
           <id>ibiblio</id>    
           <mirrorOf>central</mirrorOf>    
           <name>Human Readable Name for this Mirror.</name>    
           <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>    
         </mirror>
     
         <mirror>    
           <id>jboss-public-repository-group</id>    
           <mirrorOf>central</mirrorOf>    
           <name>JBoss Public Repository Group</name>    
          <url>http://repository.jboss.org/nexus/content/groups/public</url>    
         </mirror>
     
         <mirror>    
          <id>JBossJBPM</id>   
        <mirrorOf>central</mirrorOf>   
         <name>JBossJBPM Repository</name>   
         <url>https://repository.jboss.org/nexus/content/repositories/releases/</url>  
         </mirror>
    

    五、仓库搜索服务地址

    Sonatype Nexus:https://repository.sonatype.org/

    MVNrepository:http://mvnrepository.com/

    展开全文
  • Maven仓库

    2017-03-03 15:21:00
    Maven仓库 一、什么是Maven仓库  Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。 二、仓库的布局   任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一的...

    Maven仓库

    一、什么是Maven仓库

        Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。

    二、仓库的布局 

        任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一的存储路径,这便是Maven的仓库布局方式
        考虑这个构件:groupId=org.testng、artifactId=testng、version=5.8、classifier=jdk5、packaging=jar,其对应的路径按如下步骤生成:
          1.基于构件的groupId准备路径,formatAsDirectory(0将groupId中的句点分隔符转换成路径分隔符,org.testng -----> org/testng/
          2.基于构件的artifactId准备路径,在前面的基础上加上artifactId分路径,org/testng/ ------> org/testng/testng/
          3.使用版本信息,在前面的基础上加上veision和路径分隔符,org/testng/testng/ -----> org/testng/testng/5.8/
          4.依次加上artifactId,构件分割连接符以及version,org/testng/testng/5.8/ -----> org/testng/testng/5.8/testng-5.8
          5.如果构件有classifier,就加上构件分隔符连字号和classifier, org/testng/testng/5.8/testng-5.8 ------> org/testng/testng/5.8/testng-5.8-jdk5
          6.检查构件的exclusion,若存在exclusion,则加上句点分割符和exclusion,packaging决定了构件的扩展名,最终路径为:org/testng/testng/5.8/testng-5.8-jdk5.jar

    三、仓库的分类  

        仓库分为两类:本地仓库远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,本地仓库有则直接使用,若本地仓库没有或需要查看是否有更新的版本,
        Maven就回去远程仓库查找,发现构件后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,Maven就会报错
        本地仓库:不管是Windows还是Linux,每个用户在自己的用户目录下都有一个路径为.m2/repository/的仓库目录
        远程仓库:如果本地仓库相当于书房,那远成程库就相当于书店,书店可以有很多个。对于Maven来说,每个用户只有一个本地仓库,但可以配置很多远程仓库
        中央仓库:由于最原始的本地仓库是空的,Maven必须知道至少有一个可用的远程仓库,中央仓库就是一个这样的默认的远程仓库,Maven的安装文件自带了中央仓库的配置
        私服:私服是一种特殊的远程仓库,它是假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用
        私服的好处:

              1.节省自己的外网带宽
              2.加速Maven构建
              3.部署第三方构建
              4.提高稳定性,增强控制
              5.降低中央仓库的负荷

    四、仓库的配置

     1          <repositories>
     2             <repository>
     3                 <id>jboss</id>
     4                 <name>JBoss Repository</name>
     5                 <url>http://repository.jboss.com/maven2/</url>
     6                 <releases>
     7                     <enabled>true</enabled>
     8                 </releases>
     9                 <snapshots>
    10                     <enabled>false</enabled>
    11                     <updatePolicy>daily</updatePolicy>
    12                     <checksumPolicy>ignore</checksumPolicy>
    13                 </snapshots>
    14                 <layout>default</layout>
    15             </repository>
    16         </repositories>           

        repositories元素下,可以使用repository元素声明一个或多个远程仓库,id为远程仓库的唯一标识,name为仓库名称,url为仓库地址
        releases为true,表示开启JBoss仓库的发布版本下载支持,snapshots为false,表示关闭JBoss仓库的快照版本的下载支持
        layout元素值为default表示仓库的布局是maven2及maven3的默认布局,updatePolicy用来配置远程仓库的更新频率,默认值是daily,表示
        每天检查一次,never,表示从不检查,always表示每次构建都检查,interval:X,表示每隔X分钟检查一次
        checksumPolicy用来配置Maven检查检验和文件的策略,下载构件的时候,Maven会验证校验和文件,如果验证失败,当checksumPolicy的
        值为warn时,Maven会输出警告信息,值为fail,遇到校验错误就让构建失败,ignore表示Maven完全忽略校验的错误

    五、远程仓库的认证

        有时候出于安全考虑,我们需要提供认证信息才能访问一些仓库

        配置settings.xml

    1        <servers>
    2                 <server>
    3                     <id>my-proj</id>
    4                     <username>repo-user</username>
    5                     <password>repo-pwd</password>
    6                 </server>
    7             </servers>

        这里的id需要跟pom中需要认证的repository元素的id完全一致

    六、部署至远程仓库

        Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构建部署到仓库中,编辑pom.xml

     1      <distributionManagement>
     2             <repository>
     3                 <id>proj-releases</id>
     4                 <name>Proj Release Repository</name>
     5                 <url>http://192.168.1.100/content/repositories/proj-releases</url>
     6             </repository>
     7             <snapshotRepository>
     8                 <id>proj-snapshots</id>
     9                 <name>Proj Snapshot Repository</name>
    10                 <url>http://192.168.1.100/content/repositories/proj-snapshots</url>
    11             </snapshotRepository>
    12         </destributionManagement>    

        distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本仓库,后者表示快照版本仓库
        配置正确后,在命令行运行mvn clean deploy,Maven就会将项目构建输出的构件部署到配置的对应的远程仓库,如果项目当前的版本是快照版本,则
        部署到快照版本仓库地址,否则就部署到发布版本仓库地址

    七、镜像

        如果仓库X可以提供仓库Y存储的所有的内容,那么就可以认为X是Y的一个镜像。可以使用镜像来代替中央仓库:编辑settings.xml:

    1       <mirrors>
    2             <mirror>
    3                 <id>maven.net.cn</id>
    4                 <name>one of the central mirrors in China</name>
    5                 <url>http://maven.net.cn/content/groups/public</url>
    6                 <mirrorOf>central</mirrorOf>
    7             </mirror>
    8         </mirrors>

        mirrorOf值为central代表中央仓库,对于任何中央仓库的请求都会转至该镜像

        为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
        <mirrorOf>*</mirrorOf> 匹配所有远程仓库
        <mirrorOf>external:*</mirrorOf> 匹配所有不在本机上的远程仓库
        <mirrorOf>repo1,repo2</mirrorOf> 匹配repo1,repo2仓库
        <mirrorOf>*,!repo1</mirrorOf> 匹配所有远程仓库,repo1除外

    八、仓库搜索服务    

        以下网站提供方便的途径寻找需要的依赖:
          Sonatype:http://repository.sonatype.org/
          Jarvana:http://www.jarvana.com/jarvana/
          MVNbrowser: http://www.mvnbrowser.com/
          MVNrepository:http://mvnrepository.com/

    转载于:https://www.cnblogs.com/zzdd-blogs/p/6496851.html

    展开全文
  • maven仓库管理

    2017-11-04 14:38:12
    1 Maven仓库管理 1.1 什么是Maven仓库? 用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging 1.2 ...

    1 Maven仓库管理
    1.1 什么是Maven仓库?
    用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging
    1.2 仓库的分类
    1、本地仓库
    ~/.m2/repository
    每个用户只有一个本地仓库
    2、远程仓库
     中央仓库:Maven默认的远程仓库,不包含版权资源
    http://repo1.maven.org/maven2

     私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

    这里写图片描述
    1.3 Maven私服
    1.3.1 安装Nexus
    为所有来自中央仓库的构建安装提供本地缓存。
    下载网站:http://nexus.sonatype.org/

    安装版本:nexus-2.7.0-06.war

    第一步:将下载的nexus的war包复制到tomcat下的webapps目录。
    第二步:启动tomcat。nexus将在c盘创建sonatype-work目录【C:\Users\当前用户\sonatype-work\nexus】。
    1.3.1.1 Nexus的目录结构
     目录结构如下:
    这里写图片描述
     Indexer 索引目录结构:
    这里写图片描述
     Storage存储目录结构:
    这里写图片描述
    1.3.2 访问Nexus
    访问URL: http://localhost:8080/nexus-2.7.0-06/

    默认账号:
    用户名: admin
    密码: admin123

    1.3.3 Nexus的仓库和仓库组
    这里写图片描述
    仓库有4种类型 :
     group(仓库组):一组仓库的集合
     hosted(宿主):配置第三方仓库 (包括公司内部私服 )
     proxy(代理):私服会对中央仓库进行代理,用户连接私服,私服自动去中央仓库下载jar包或者插件
     virtual(虚拟):兼容Maven1 版本的jar或者插件

    Nexus的仓库和仓库组介绍:
     3rd party: 一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构建
     Apache Snapshots: 一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构建
     Central: 代理Maven中央仓库
     Central M1 shadow: 代理Maven1 版本 中央仓库
     Codehaus Snapshots: 一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件
     Releases: 一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件
     Snapshots: 一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件
     Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务
    1.3.4 配置所有构建均从私服下载
    在本地仓库的setting.xml中配置如下:



    nexus
    *
    http://localhost:8080/nexus-2.7.0-06/content/groups/public/

    1.3.5 部署构建到Nexus
    1.3.5.1 第一步:Nexus的访问权限控制
    在本地仓库的setting.xml中配置如下:

    releases
    admin
    admin123


    snapshots
    admin
    admin123

    1.3.5.2 第二步:配置pom文件
    在需要构建的项目中修改pom文件


    releases
    Internal Releases
    http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/


    snapshots
    Internal Snapshots
    http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/

    1.3.5.3 第三步:执行maven的deploy命令

    展开全文
  • 1.什么是maven仓库 Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的...
  • maven仓库笔记

    2020-06-29 20:29:43
    1.什么是Maven仓库 在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。 Maven可以在某个位置统一存储所有 Maven项目共享的构件,这个统一的位置就是仓库。实际的 Maven项目将不再各自存储其...
  • 什么是maven仓库? 用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging 仓库的分类 本地仓库 远程...
  • Maven 是一种构建工具,Maven 包是由所谓 POM(Project Object Model)所定义的文件项目对象模型存储在名为 pom.xml 的文件中。以下是一个简单的示例:4.0.0com.mycompany.appmy-app1.0junitjunit3.8.1test对于一个合...
  • Maven仓库是什么

    2021-01-06 08:29:34
    Maven仓库是什么 Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的坐标机制...
  • maven仓库详解

    2017-12-08 21:13:54
    1、何为maven仓库 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)...
  • Maven 仓库与配置1.Maven 仓库2.中央仓库3....仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这要得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件
  • Maven仓库与坐标

    2016-04-07 15:16:57
    Maven仓库1.Maven仓库分为本地仓库和远程仓库 如果maven本地的仓库找不到我们所需的构件,maven会去全球的中央仓库去查找,查找到会下载到本地仓库。如果查找不到,就会报错 2.Maven默认提供了一个全球的中央仓库...
  • Maven仓库管理 ** 1 什么是Maven仓库? 用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging 2 仓库的...
  • 文章目录一、安装及配置1、下载2、配置环境变量3、Maven配置文件settings.xml4、修改本地仓库的路径二、Maven 仓库1、Maven 仓库有三种类型2、...、远程仓库4.1 远程仓库的概念4.2 定义远程仓库5、Maven 依赖搜索顺序...
  • Maven仓库是什么?

    2020-12-07 18:02:28
    Maven仓库是什么? Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的坐标...
  • Maven仓库和插件

    千次阅读 2018-05-30 11:38:18
    Maven仓库的概念 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目共享的构建,这个位置就称之为仓库。 任何构件都有唯一的坐标,Maven根据这个坐标定义...
  • Maven 仓库、镜像

    2021-03-11 14:09:25
    Maven 仓库、镜像 ...根据这个坐标就可以定义其在仓库的唯一存储路径,那么就可以在项目中引用。 <groupId>junit</groupId> <artifactId>junit</artifactId> <version>...
  • maven 仓库分类

    2017-01-05 15:58:45
    maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该...
  • maven05----maven仓库

    2019-01-10 17:34:00
    仓库布局:根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging 二. 仓库的分类 2.1、本地仓库  每个用户只有一个本地仓库,默认是在~/.m2/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 961
精华内容 384
关键字:

maven仓库定义