zoukankan      html  css  js  c++  java
  • (四)Maven中的仓库

    一、分类

    • maven的仓库只有两大类:

      •   1.本地仓库

      •   2.远程仓库,在远程仓库中又分成了3种:

        •   2.1 中央仓库

        •   2.2 私服

        •   2.3 其它公共库

    二、本地仓库

    • 本地仓库,顾名思义,就是Maven在本地存储构件的地方。
    • 注:maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建,maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置
    • 如何更改maven默认的本地仓库的位置,修改maven的settings.xml文件中的localRepository标签值。
        <settings>  
            <localRepository>D:maven_new_repository</localRepository>  
        </settings>  

    三、中央仓库

    • 中央仓库是默认的远程仓库,maven在安装的时候,自带的就是中央仓库的配置

    • 案例:修改默认中央仓库,即下载依赖包不再从默认的中央仓库中下载(虽然更新快但是下载速度慢),只需修改工程的pom.xml文件即可。

    <!-- 修改中央仓库 -->
    <repositories>
        <repository>
        <!-- 指定仓库唯一id -->
            <id>resp</id> 
            <!-- 指定仓库名 -->
            <name>resp</name>
            <!-- 指定仓库地址 -->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <!-- 设置仓库是否为默认仓库 -->
            <layout>default</layout>
            <!-- 设置是否可以从url对应的仓库中下载快照snapshots版本的依赖 -->
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <!-- 设置是否可以从url对应的仓库中下载稳定releases版本的依赖 -->
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    
    <!-- 修改插件仓库 -->
    <pluginRepositories>
        <pluginRepository>
            <id>pluginTest</id>
            <name>pluginTest</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    • 此时下载依赖会在http://maven.aliyun.com/nexus/content/groups/public/和默认中央仓库两个仓库同时下载,如果想要禁止默认中央仓库下载,可以将自己设置的仓库的id设置为中央仓库的id即<id>central</id>
    •  缺点:只针对当前工程,新建工程还是从默认中央仓库下载。
    • 案例二:通过修改镜像,修改所有工程的默认中央仓库

      •   修改maven的setting.xml文件
        <mirror>
                <id>mirrorId</id>
                <name>aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>*</mirrorOf>
            </mirror>
    •   其中 <mirrorOf>*</mirrorOf> 指对所有工程的所有仓库进行映像,即所有工程所有仓库都会无效,下载依赖时从镜像的url仓库下载。如果配置<mirrorOf>central</mirrorOf>则任何从默认中央仓库下载的依赖都会转到镜像仓库下载。

    四、私服

    • 定义:私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

    • 主要用于:  团队开发的时候,某个成员写好的工程打包成jar包存放于私服中,团队其他成员可以从私服中下载即可使用。如果没有私服,则必须拷贝jar包,然后在自己的工程中引入gav坐标才能使用,很麻烦。

    •  Nexus私服的安装与搭建使用,具体步骤请参考:windows下Nexus搭建Maven私服
    •  案例: 设置maven工程从私服下载依赖

    <repositories>
            <repository>
                <id>nexus resp</id>
                <name>nexus resp</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <layout>default</layout>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
        </repositories>
    
        <pluginRepositories>
            <pluginRepository>
                <id>plugin resp</id>
                <name>plugin resp</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <layout>default</layout>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>
      •     其中,<url>http://localhost:8081/nexus/content/groups/public/</url> url的地址为nexus中group的地址,即

      •     值得注意的是: 上面项目的前提是setting.xml文件不能设置镜像为如下:
      • <mirror>
              <id>mirrorId</id>
              <mirrorOf>*</mirrorOf>
              <name>aliyun</name>
              <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </mirror>

        否则maven工程将直接访问镜像所对应的仓库而不是我们的私服仓库。可以把镜像配置改为<mirrorOf>central</mirrorOf>,这样只会把中央仓库的请求转到镜像对应的仓库,而请求私服的请求是不会转到镜像对应的仓库的。

      •    一般来说,我们都把镜像对应的仓库设置为私服仓库,而私服仓库代理的仓库设置为阿里云仓库,这样当maven工程需要依赖的时候首先从本地仓库中找,如果没有则从私服中下载,如果私服不存在该依赖则把该依赖从阿里云中下载到私服。注意,maven工程install之后只会打包到本地仓库,而私服仓库是不会有的,需要手动添加。
  • 相关阅读:
    Spring MVC 拦截器
    spring中MultiActionController的数据绑定
    Hibernate多对多配置
    hibernate实体类配置文件问题(字段使用默认值)
    HibernateTemplate类的使用 (转)
    javascript小笔记(一)
    spring整合hibernate(2)
    Sina AppEngine 的bug
    找工作
    天下武功唯快不破
  • 原文地址:https://www.cnblogs.com/shyroke/p/7306440.html
Copyright © 2011-2022 走看看