Maven的仓库
以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_repositories.html:
什么是Maven仓库?
在Maven的术语中,仓库是一个地方或者说是目录,其中存储有项目jar包、库、插件或者任何其他项目指定的组件,并且易于被Maven使用。
Maven仓库有三种类型:
- 本地仓库(local)
- 中央仓库(central)
- 远程仓库(remote)
Maven依赖搜索顺序
当我们执行Maven构建命令时,Maven将开始按照下面的顺序搜索依赖库。
-
第1步 - 搜索本地仓库中的依赖,如果没有找到,进入第2步,否则若找到则进行后续的处理。
-
第2步 - 搜索中央仓库中的依赖,如果没有找到并且指定了远程仓库,则进入第4步,否则若找到,则下载依赖到本地仓库进行后续的查询。
-
第3步 - 如果远程仓库没有指定,Maven将简单地停止构建并且抛出异常(找不到依赖)。
-
第4步 - 搜素远程仓库中的依赖,如果找到则下载依赖到本地仓库进行后续的查询,否则Maven按预想地停止构建并且抛出异常(找不到依赖)。
Maven仓库依赖示意图
图片出自:http://maven.apache.org/repository/index.html
本地仓库(local)
Maven本地仓库是电脑上的某个目录地址。它会在你第一次运行maven任意命令时创建。
Maven本地仓库保存着你项目所有的依赖(库的、插件的jar包等等)。当你运行Maven构建时,Maven会自动下载所有依赖的jar包到本地仓库中。这会帮助避免每次项目构建时项目的依赖参考都存储在远程的主机上。
Maven默认在%USER_HOME%\.m2目录下创建Maven本地仓库。若要重写默认路径需要在Maven的setting.xml中指定另外一个路径。Maven的setting.xml文件可在%M2_HOME%\conf目录下获取。
提示:%USER_HOME%和表示Windows的环境变量,默认是在C:\Users\用户名下。%M2_HOME%为自定义的环境变量,表示Maven程序存放的目录。Linux下同理。
配置自定义本地仓库位置:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <localRepository>C:/MyLocalRepository</localRepository> ... </settings>
提示:为了避免处理异常,上面的路径采用Linux下的斜杠为写法,因为Windows两种斜杠都是支持的。
中央仓库(central)
Maven中央仓库是由Maven社区提供的仓库。它包含大量的常用库。Maven当未在本定仓库中找到任何的依赖时,Maven会使用下面的URL在中央仓库中搜索:http://repo1.maven.org/maven2/
中央仓库几个关键概念:
- 中央仓库仓库是由Maven社区管理。
- 中央仓库不需要配置。
- 搜索中央仓库需要接入互联网。
Maven社区提供了一个URLhttp://search.maven.org/供用户浏览Maven中央仓库的内容。用这种方法,开发者可以搜索中央仓库中所有可用的库。
提示:默认的中央仓库地址可以修改,并且默认中央仓库可以提交自己的包上去。
远程仓库(remote)
有时Maven在中央仓库中也找不到指定的依赖,这时Maven会停止构建进程并且输出错误信息到控制台。为了防止这样的情况,Maven提出了远程仓库的概念,即开发者自己定制的包含库或者其他项目jar包的仓库。
比如,使用下面提到的pom.xml文件,Maven将会从此pom.xml指定的远程仓库中下载依赖(依赖在中央仓库中找不到时)。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>com.companyname.common-lib</groupId> <artifactId>common-lib</artifactId> <version>1.0.0</version> </dependency> <dependencies> <repositories> <repository> <id>companyname.lib1</id> <url>http://download.companyname.org/maven2/lib1</url> </repository> <repository> <id>companyname.lib2</id> <url>http://download.companyname.org/maven2/lib2</url> </repository> </repositories> </project>
提示:上述的地址不是真实地址。其中仓库的顺序也是查找的顺序,从上往下的进行搜索。
其它参考:
http://maven.apache.org/guides/introduction/introduction-to-repositories.html