Maven 仓库
构件:任何一个依赖、插件或者项目构件的输出,都可以成为构件。任何一个构件都有一组坐标唯一标示。 得益于坐标机制,任何Maven项目使用任务一个构件的方式都是一致的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不再各自存储其依赖文件。它们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,使用它们。 为了实现重用,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。
在 Maven 的术语中,仓库是一个位置(place)。
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
中央仓库:Maven核心自带的远程仓库,包括了绝大数开源的构件。默认如果本地仓库没有的时候从中央仓库下载。
私服:一个特殊的远程仓库,为了节省宽带和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库,内部的项目还能部署到私服上供其他项目使用。
仓库的布局
任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式。路径和坐标的大致对应关系为groupId/artifactId/version/artifactId-version.packaging
本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<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>
当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。 要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
远程仓库
如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
- 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
- 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
- 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
远程仓库的配置
很多情况,默认的中央仓库无法满足项目需求,需要配置其他远程仓库。可以在pom中配置该仓库。
- id:任何一个仓库的声明id必须是唯一的,尤其是注意Maven自带中央仓库的id是central,如果其他仓库声明也使用该id,就会覆盖中央仓库配置。
- url:仓库地址
- release:控制Maven对于发布版构件的下载。
- snapshots:控制Maven对于快照版构件的下载。
- enable:是否开启release或者snapshots的下载支持。
- updatePolicy:用来配置Maven从远程仓库检查更新的频率,默认是daily,表示每天检查一次;never:从不检查更新;always:每次构建都检查更新;interval:X 每隔X分钟检查一次更新。
- checksumPolicy:用来配置Maven检查检验和文件的策略。当构建被部署到Maven仓库中时,会同时部署对于应用的检验和文件,在下载构件的时候,Maven会验证校验和文件,如果失败?checksumPolicy默认值是warn,会执行构建时输出警告信息,其他可用——fail:遇到校验和错误就构件失败;ignore:完全忽略校验和错误。
远程仓库的认证
大部分无需验证就可直接访问,但是出于安全可以配置仓库用户名和密码,所以需要认证。
配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中。这是因为POM往往被提交代码仓库供所有成员访问,而settings.xml一般只放在本机,所以更安全。
id:必须和POM中需要认证的Repository元素的id完全一致。正是这个id将认证信息和仓库配置联系在一起。
username:你懂得 password:你懂得
部署至远程仓库
Maven除了能对项目进行编译、测试、打包之外,还能降项目生成的构建部署到仓库中。
(1)首先编辑项目的pom.xml文件,配置
distributionManagement包含repository和snapshotRepository子元素,前者发布版本构建的仓库,后者表示快照版本的仓库。这两个元素下都有id、name、url标签。id是仓库的唯一标示,name是为了方便人阅读,url表示该仓库的地址。
(2)配置正确后在命令行运行mvn clean deploy,Maven就会将项目构件部署带配置对应的远程仓库,如果项目当前的版本是快照版本,则部署到快照版本仓库地址,否则就部署到发布版本仓库地址。
Maven 阿里云(Aliyun)仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
修改 maven 根目录下的 conf 文件夹中的 settings.xml 文件,在 mirrors 节点上,添加内容如下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
如果想使用其它代理仓库,可在
<repository>
<id>spring</id>
<url>https://maven.aliyun.com/repository/spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
在你的 pom.xml 文件
<dependency>
<groupId>[GROUP_ID]</groupId>
<artifactId>[ARTIFACT_ID]</artifactId>
<version>[VERSION]</version>
</dependency>
执行拉取命令:
mvn install
镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以说X是Y的一个镜像。 配置在settings.xml中。