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>

 

posted @ 2018-08-25 08:50  嗜血蚂蚁  阅读(1011)  评论(0编辑  收藏  举报