maven-仓库
1、maven仓库
- 在Maven的世界里,任何一个依赖、插件、项目构建的输出,都可以成为一个构件。如 log4j-1.2.15.jar依赖是一个构件,maven-compile-pligin-2.0.2.jar插件是一个构件,myapp项目构建完后输出myapp-1.0-SNAPSHOT.war也是一个构件。Maven在某个位置存储所有maven项目共享的构件,这个位置就称为仓库。每一个构件在仓库中都有一个唯一的坐标。
- maven是基于简单文件系统存储的,根据依赖生成的路径可以在maven仓库的文件系统找到对应的文件–maven的布局
<dependency> <groupId>org.testing</groupId> <artifactId>testng</artifactId> <version>5.6</version> <classifier>jdk15</classifier> 注:该项不会出现在依赖申明中,便于举例写于此处 <packaging>jar</packaging> </dependency>
查找构件的步骤:
a、基于groupId准备路径,将.转换为/,并在最后添加路径分隔符 –>org/testing
b、基于artifactId准备路径,在前面基础添加artifactId和路径分隔符 –>org/testing/tesng/
c、使用版本信息,在前面基础上添加version和路径分隔符 –>org/testing/tesng/5.6/
d、依次加上artifactId,构建分隔符连字号,以及version –>org/testing/tesng/5.6/tesng-5.6
e、如果有classifier,则添加classifier和 路径分隔符 –>org/testing/tesng/5.6/tesng-5.6-jdk15
f、添加扩展名 –>org/testing/tesng/5.6/tesng-5.6-jdk15.jar
2、仓库的分类
对Maven来说,仓库分为本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,现在本地仓库查找,找到直接使用,否则去远程仓库查找,找到了下载到本地仓库再使用。如果在本地仓库和远程仓库都没有找到,maven会报错。
- 本地仓库:setting.xml指定本地仓库的路径
- 远程仓库-中央仓库:maven的默认远程仓库
maven有默认的远程仓库的配置,详见D:\apache-maven-3.5.0\lib\maven-model-builder-3.5.0\org\apache\maven\mode\pom-4.0.0.xml
<repositories> <repository> <id>central</id> 中央仓库的唯一标志 <name>Central Repository</name> 可读性名称 <url>https://repo.maven.apache.org/maven2</url> 中央仓库的地址 <layout>default</layout> 默认布局,1中所示 <snapshots> 快照配置 <enabled>false</enabled> 失能,表示不从中央仓库下载快照版本的构件 </snapshots> </repository> </repositories>
- 远程仓库-私服:架设在局域网内的仓库,代理广域网上的远程仓库,供局域网内的maven用户使用
私服优势:
a、节省外网带宽:减少了大量对远程仓库的重复请求
b、加速maven构建:maven内部机制(如快照更新检查)要求maven执行构建的时候不停地检查远程仓库数据,当配置了很多远程仓库时,构建速度会被大大降低。使用私服maven仅需要检查局域网内私服的数据。
c、部署第三方构件:构件无法从任何远程仓库获取,比如公司内部生成的私有构件,orcale的JDBC由于版权因素无法发布到公共仓库,建立私服后可以将这些构件发布到私服供大家使用
…
3、远程仓库的配置
<repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> 更新策略,never-从不检查更新lalways-每次构建都检查更新;interval:X-每隔X分钟检查一次更新 </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
- 远程仓库的认证:
大部分远程仓库不需要认证,部分出于安全考虑,需要认证
<server> <id>my-proj</id> <username>user</username> <password>passwd</password> </server>
认证信息必须配置在setting.xml文件中;id元素的值必须与配置的仓库的id一致
- 部署到远程仓库:
发布到远程仓库往往需要认证,配置通上。以下配置了稳定版本发布的仓库和快照版本发布的仓库:
<distributionManagement> <repository> <id>proj-releases</id> <name>Tesla Releases</name> <url>http://192.168.1.1/content/repositories/proj-releases</url> </repository> <snapshotRepository> <id>proj-snapshots</id> <name>Tesla Snapshots</name> <url>http://192.168.1.1/content/repositories/proj-snapshots</url> </snapshotRepository> </distributionManagement>
4、镜像
如果仓库A可以提供仓库B的所有内容,那么可以认为A是B的一个镜像。比如:http://maven.net.cn/contents/groups/public是中央仓库http://repol.maven.org/maven2在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。因此,可以配置maven使用该镜像来替代中央仓库
<mirror> <id>maven.net.cn</id> <name>Team Nexus Release Mirror</name> <mirrorOf>central</mirrorOf> 表示该配置为central中央仓库的镜像,任何对中央仓库的请求都会转至该镜像 <url>http://maven.net.cn/contents/groups/public</url> </mirror>