Maven 仓库

  |   0 评论   |   0 浏览

Maven仓库是存放各种类型的构件(artifact)和依赖包的地方。
总的来说,Maven 仓库有两种类型:

  • 本地(local)—— Maven运行的电脑上的目录。
  • 远程(remote)—— 需要使用网络协议(比如:file://https://)访问的仓库。

本地仓库(Local Repository)

Maven的本地仓库,在安装Maven后并不会创建,它是在第一次执行maven命令的时候才被创建。
运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是Windows,每个用户在自己的用户目录下都有一个路径名为.m2/respository/的仓库目录。
Maven本地仓库默认被创建在%USER_HOME%目录下。要修改默认位置,在%M2_HOME%\conf目录中的settings.xml文件中定义另一个路径。

1<localRepository>/path/to/local/repo</localRepository>

远程仓库(Remote Repository)

当声明的依赖在本地仓库中找不到时,Maven会从远程仓库(默认是中央仓库)进行下载。

中央仓库(Central Repository)

Maven中央仓库是由Maven社区提供的仓库,其中包含了大量常用的库。

这个仓库由 Maven 社区管理。
不需要配置。
需要通过网络才能访问。
要浏览中央仓库的内容,Maven社区提供了一个 URLhttp://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

内部仓库(Internal Repository)

如果开发环境不允许连接互联网,那么需要自行创建一个内部仓库。

创建一个内部仓库
创建内部仓库只需要从其它远程仓库(比如:中央仓库)将所需要的构件(artifact)复制到自己的服务器上,并且目录层级结构还要保持不变。
Maven建议使用仓库管理软件管理内部仓库,可用的仓库管理软件:

  • Apache Archiva (open source)
  • CloudRepo (commercial)
  • Cloudsmith Package (commercial)
  • Dist (commercial)
  • JFrog Artifactory Open Source (open source)
  • JFrog Artifactory Pro (commercial)
  • MyGet (commercial)
  • Sonatype Nexus OSS (open source)
  • Sonatype Nexus Pro (commercial)
  • packagecloud.io (commercial)
  • Reposilite (open source)

如何使用?
内部仓库创建成功后,只需在pom.xml文件中进行相关配置就可以了。

 1<project>
 2  ...
 3  <repositories>
 4    <repository>
 5      <id>my-internal-site</id>
 6      <url>http://myserver/repo</url>
 7    </repository>
 8  </repositories>
 9  ...
10</project>

仓库镜像

默认情况下,maven从中央仓库下载依赖包和插件。但是,国内使用中央仓库网速很慢,为了提高速度,我们可以为中央仓库配置镜像。
需要在${user.home}/.m2/settings.xml进行如下配置:

1<mirrors>
2    <mirror>
3      <id>alimaven</id>
4      <name>aliyun maven</name>
5      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
6      <mirrorOf>central</mirrorOf>
7    </mirror>
8</mirrors>

其中<mirrorOf>用于指定这是谁的镜像,一个仓库最多只能有一个镜像仓库。
上面的示例中我们使用的是阿里云的maven仓库作为中央仓库的镜像。因此,对中央仓库的请求会转发到阿里云的maven仓库。

另外,我们可以通过配置强制Maven使用单个仓库。

 1<settings>
 2  ...
 3  <mirrors>
 4    <mirror>
 5      <id>internal-repository</id>
 6      <name>Maven Repository Manager running on repo.mycompany.com</name>
 7      <url>http://repo.mycompany.com/proxy</url>
 8      <mirrorOf>*</mirrorOf>
 9    </mirror>
10  </mirrors>
11  ...
12</settings>

上面的示例中,<mirrorOf>的值是*,代表这是所有仓库的镜像。换句话说,不管你在POM文件中配置的是什么仓库,最终使用的都是这个镜像仓库。

相关资料
Introduction to Repositories
Using Mirrors for Repositories