仓库

大彬大约 2 分钟

仓库

仓库分为两类:本地仓库和远程仓库。当 maven 根据坐标去寻找构件时,首先会去本地仓库查找,如果本地仓库不存在这个构件,maven 就会去远程仓库查找,下载到本地仓库。若远程仓库也没有这个构件,则会报错。

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

本地仓库

要想自定义本地仓库地址,可以修改 C:\Users\Tyson\.m2 下的 settings.xml 文件(默认不存在,需要到 maven 安装目录复制),不建议直接修改 maven 安装目录下的 settings.xml 文件。

通过mvn clean install可以将本地项目安装到本地库,以供其他项目使用。

远程仓库

当默认的中央仓库无法满足项目需要,可以通过 repositories 元素在 POM 中配置远程仓库。maven 中央仓库 id 为 central,若其他仓库 id 命名为 central,则会覆盖中央仓库的配置。

![](http://img.topjavaer.cn/img/使用Jbossopen in new window maven仓库.png)

maven中的仓库分为两种,snapshot 快照仓库和 release 发布仓库。元素 releases 的 enabled 为 true 表示开启 Jboss 仓库 release 版本下载支持,maven 会从 Jboss 仓库下载 release 版本的构件。

认证和部署

有些远程仓库需要认证才能访问,可以在 settings.xml 中配置认证信息(更为安全)。

<!-- setting.xml -->
<servers>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

server元素的id要和pom.xml里需要认证的repository元素的id对应一致。

<!-- pom.xml 配置远程发布到私服,mvn deploy -->
<distributionManagement>
    <repository>
        <id>releases</id>
        <name>releases</name>
        <url>
            http://localhost:8081/nexus/content/repositories/releases
        </url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>
            http://localhost:8081/nexus/content/repositories/snapshots/
        </url>
    </snapshotRepository>
</distributionManagement>

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

镜像

mirrorsOf 配置为 central,表示其为中央仓库的镜像,任何对中央仓库的请求都会转发到这个镜像。

<mirrors>
    <mirror>
    	<id>alimaven</id>
    	<name>aliyun maven</name>
    	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    	<mirrorOf>central</mirrorOf>
  </mirror>
</mirrors> 

<mirrorOf>*<mirrorOf>:匹配所有远程仓库。

<mirroOf>external:*<mirrorOf>:匹配所有不在本机上的所有远程仓库。

<mirrorOf>repo1, repo2<mirrorOf>:匹配仓库repo1 和 repo2。

<mirrorOf>*, !repo1<mirrorOf>:匹配除了repo1以外的所有远程仓库。

Loading...