RoadMap

怎么查看自己的maven仓库路径 maven仓库查询_远程仓库

 



1. 仓库布局

任何一个构件(jar包) 都有一个唯一的GAV坐标,根据这个坐标,可以定位到它在仓库的存储路劲。

以  junit为例子

<groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version>

\junit\junit\4.12\junit-4.12.jar

如果有identifier,或者 extension 或在jar包名字后面加对应的名字

{artificat}-{version}-{identifier}.{packing}



2. 仓库分类

怎么查看自己的maven仓库路径 maven仓库查询_怎么查看自己的maven仓库路径_02

对于Maven来说,仓库有两种,本地仓库和远程仓库。

maven在构建的时候,会优先从本地仓库找,如果没有再去远程仓库找并且下载到本地仓库。



2.1 本地仓库

本地仓库 默认是在 ~/.m2/repository   下面, 也可以自定义。通过修改maven的配置文件 MAVEN_HONE/conf/Setting.xml

怎么查看自己的maven仓库路径 maven仓库查询_xml_03

推荐在~/.m2/setting.xml 下做修改, 如果没有则拷贝MAVEN_HONE/conf/Setting.xml一份过来,因为conf/Setting.xml是全局的配置。



2.2 远程仓库

远程仓库是一个在线的MAVEN仓库,可以分为三类, 中央仓库,私服,其他类型



2.2.1 中央仓库

    可以说是一个默认的 公共的远程仓库, 不管怎么说,maven至少有一个远程可用的仓库存在,以保证在构建的时候,本地仓库没有任何可用的jar时候可以访问远程库进行下载。

    无需做任何配置的情况下, Maven默认将中央库配置http://repo1.maven.org/maven2 下面。



2.2.2 私服

   私服是一个特殊的远程仓库,或者说是自行搭建的一个局域网内的在线仓库,如果是公网那就编程中央仓库了,

   在有私服的情况下,在本地库不存在需要的jar 时候,会去私服上找,如果私服没有再去中央库下载。所以 私服它缓存了各大中央仓库的构建,另外私服也可以管理自行编写的构件。

   针对有网略限制,或者有安全策略的(毕竟开源的jar并不是100%可靠的)社区或企业来说,搭建私服是一个很好的管理手段。

怎么查看自己的maven仓库路径 maven仓库查询_xml_04

私服具有一下优势:

    1. 节省外网带宽。 2.加速构建,毕竟是局域网内 3. 上传自定义构建 4.增强构建管理,5降低中央仓库的负荷



2.3 远程仓库的配置

仓库配置,可以在全局的配置文件或者项目pom文件里面 做配置.

配置节点是  <repositoires>和<pluginRepositories>

分别对应 构件库和插件库,虽然理论上都是jar,根据作用不同做了配置区分。

另外配置的时候可以指定下载 release还是snapshot

id,name,和url 可以任务是仓库的GAV坐标。

<repositories>
        <repository>
            <id>jboss</id>
            <name>jboss</name>
            <url>http://repostiory.jboss.com/maven2</url>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
                <updatePolicy>daily</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
                <updatePolicy>daily</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>jboss</id>
            <name>jboss</name>
            <url>http://repostiory.jboss.com/maven2</url>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
                <updatePolicy>daily</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
                <updatePolicy>daily</updatePolicy>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>



2.3.1 下载策略

下载策略指的是,何时去中央库缓存,同步,更新jar包。可以配置的值有

daily; 每天同步一次
never: 从来不同步
always:每次构建的时候 都去中央库同步一次
interval X: x表示每隔多少分钟同步跟新一次



2.3.2 文件检验策略

检验策略指的是,在同步或者上传构件的同时,会生成一份校验和文件,当maven客户端去下载构件的时候会进行校验,配置的策略做出不同的处理。

可配置的值有

warn: 发出警告,但依然会继续构建
ignore: 忽略校验信息
fail: 构建失败



2.4 远程认证

大部分远程仓库是不需要认证,直接可以访问。 出于安全考虑远程仓库提供了认证服务。

与仓库配置不同的是,它只能配置在 setting.xml里面

配置节点是<servers>,同时支持2种认证方式, 用户名密码和非对称密钥。

<servers>
    <!-- server
     | Specifies the authentication information to use when connecting to a particular server, identified by
     | a unique name within the system (referred to by the 'id' attribute below).
     |
     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
     |       used together.
     |
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->

    <!-- Another sample, using keys to authenticate.
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
    -->
  </servers>



3 发布到远程仓库

mvn clean deploy  中的deploy阶段 并非把jar或者war 部署到应用服务器上,对于初学者来说非常容易混淆,这里的deploy是将构件 发不到远程仓库,至于发布到哪个远程仓库,需要早配置文件里面做配置,

配置节点是< distributionManagement>,id,name,url 是标识,可以通过id 在setting里面配置对应的认证策略。

可以配置 release repository 和snapshot repostiory

<distributionManagement>
        <repository>
            <id>ditritbution</id>
            <name>repository name</name>
            <url>url here</url>
        </repository>
        <snapshotRepository>
            <id> snapshot distribtion id</id>
            <name>repository name</name>
            <url>url here</url>
        </snapshotRepository>
    </distributionManagement>



4 RELEASE版本与SNAPSHOT



5 仓库镜像

    如果X仓库提供了Y仓库的所有内容,则X仓库是Y仓库的镜像,换句话说,从Y仓库获得的构建,也能从X仓库获得,由于网络原因或者防火墙的缘故,各区域或就进建一个镜像,定期同步源库的构建,就近原则,所以镜像的效率往往要高于源库。

镜像的配置在 setting.xml里面,配置节点是< mirrors>, 其中mirrorOf 表示一个中央仓库的ID,任何一个访问这个Id的请求都会路由到这个镜像。

其中 mirrorOf 支持通配

<mirrorOf>*</mirrotOf> 匹配所有远程仓库

<mirrorOf>repo1,repor2</mirrotOf>匹配repo1,repo2远程仓库

<mirrorOf>*,! repor2</mirrotOf>匹配所有远程仓库 repo2除外

 

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
  </mirrors>



6 仓库搜索

在日常开发中,想要具体知道 构建的GAV,可以通过以下几个搜索网站进行查询

Sonatype Nexus:https://repository.sonatype.org/
MVNBrowser: http://www.mvnbrowser.com
Mvn Repository: http://mvnrepository.com