标签:setting pwd 构建 user 存在 远程仓库 元素 code settings
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Maven仓库。
Maven项目不会各自存储依赖文件(通常是jar文件),只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,并使用它们。
如果项目之间存在依赖关系,项目构建完毕后生成的构件也可以安装部署到Maven仓库中,供其他项目使用。
对于Maven来说,仓库只分为两类:本地仓库和远程仓库。
Maven寻找构件时,首先从本地仓库找,如果找到了则直接使用,找不到则到远程仓库找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都找不到,Maven就会报错。
中央仓库是 Maven 核心自带的远程仓库,它包含了绝大部分开源的构件,默认地址:http://repo1.maven.org/maven2。除了中央仓库,还有其它很多公共的远程仓库。
私服是架设在本机或局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库。
Maven 本地仓库默认地址为:${user.home}/.m2/repository。
如果想要自定义仓库的目录地址,需要编辑Maven的settings.xml文件:
<localRepository>D:\Program Files\apache-maven-3.5.0\repository</localRepository>
安装完 Maven ,本地仓库几乎是空的,这时需要从远程仓库下载所需构件。Maven 配置了一个默认的远程仓库,即中央仓库。
找到 %MAVEN_HOME%/lib/maven-model-builder-3.5.0.jar,打开 org/apache/maven/model/pom-4.0.0.xml,下面这段配置文件是所有Maven项目都会继承的超级POM:
当中央仓库找不到所需的构件时,我们可以配置 pom.xml,添加其它的远程仓库。
<repositories> <repository> <id>maven-repo2</id> <name>maven-repo2</name> <url>http://repo2.maven.org/maven2/</url> </repository> <repository> <id>maven-local</id> <name>maven-local</name> <layout>default</layout> <url>http://172.16.100.3:8087/nexus-service/content/groups/public/</url> </repository> </repositories>
在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库,其中id必须唯一,若将id设置为central将覆盖中央仓库的配置。
大部分远程仓库无需认证就可以访问,但有时候处于安全方面的考虑,我们需要提供认证信息才能够访问一些远程仓库。认证信息需要在settings.xml文件中配置:
<servers> <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> </servers>
Maven使用servers元素及其子元素server配置仓库的认证信息。其中id必须与pom中需要认证的repository元素的id完全一致。username和password表示认证时需要提供的用户名和密码。
Maven能够将项目生成的构件发布到远程仓库中,供其他团队成员使用。发布构件需要在pom文件中进行配置:
<distributionManagement> <repository> <id>releases</id> <url>http://172.16.100.3:8087/nexus-service/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://172.16.100.3:8087/nexus-service/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本构件的仓库,后者表示快照版本的仓库。
这两个元素下都需要配置id、name、和url,id为远程仓库的唯一标识,name是为了方便阅读,url表示仓库的地址。
往远程仓库发布构件的时候,往往需要认证,之前已经讲过,就是需要在settings.xml中配置server元素,其id与仓库的id匹配。
当配置完成后,运行Maven命令:mvn clean deploy,Maven就会将项目构建输出到对应的远程仓库。
如果仓库X可以提供仓库Y的所有内容,那么就可以认为X是Y的一个镜像。也就是说,任何一个可以从仓库Y中获得的构件,都可以从它的镜像中获得。可以通过编辑settings.xml文件来配置镜像:
<mirrors> <!-- 阿里云仓库 --> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> </mirrors>
Maven使用mirrors元素及其子元素mirror配置仓库的镜像,其中<mirrorOf>的值表示该mirror是哪个仓库的镜像,例子中<mirrorOf>的值为central,表示该mirror为中央仓库的镜像,任何对中央仓库的请求,都会转至该镜像。
id、name、url和一般仓库的配置无异,表示镜像仓库的唯一标识、名称和地址。
类似的,如果镜像需要认证,也可以基于该id配置仓库认证。
为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
需要注意的是,由于镜像仓库完全屏蔽了被镜像的仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,从而无法下载构件。
参考:
《Maven实战》
标签:setting pwd 构建 user 存在 远程仓库 元素 code settings
原文地址:http://www.cnblogs.com/Jason-Xiang/p/7641313.html