zoukankan      html  css  js  c++  java
  • Maven学习(七)仓库

    * Maven仓库

             在项目开发中,  项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件,

             Maven仓库就是放置JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,节省了磁盘资源,

             也节省了时间 不用拷来拷去的。

             此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。

             你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。

    * 仓库分类

    在运行Maven的时,Maven所需要的依赖构件都是直接从本地仓库获取的,如果本地仓库有依赖构建,直接使用;

    如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

    * 本地仓库缺省地址在${user.home}/.m2/repository目录下,(例如:C:Documents and SettingsAdministrator.m2 epository)

    自定义本地仓库位置:

          配置进入maven/conf目录 编辑settings.xml文件 修改localRepository节点

     *中央仓库 是一个默认的远程仓库,  安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvn clean install,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。 这个Maven中央仓库是在apache-maven3libmaven-model-builder-3.0.4.jar中定义,

      超级POM: orgapachemavenprojectpom-4.0.0.xml

     *私服是一种特殊的远程仓库  为了节省宽带资源和时间 应该在局域网内架设一个私有的仓库服务器,私服代理广域网上的远程仓库, 供局域网内的Maven用户使用,

      当Maven需要下载构建的时候,先给私服仓库发出请求, 如果私服上不存在构建,则从外部的远程仓库下载,缓存到私服仓库中,再为maven的下载请求提供服务。

    * 远程仓库配置

    1.编辑项目pom文件

    <repositories>  
      <repository>  
        <id>maven-net-cn</id>  
        <name>Maven China Mirror</name>  
        <url>http://maven.net.cn/content/groups/public/</url>  
        <releases>  
          <enabled>true</enabled>  
        </releases>  
        <snapshots>  
          <enabled>false</enabled>  
        </snapshots>  
      </repository>  
    </repositories>  
    <pluginRepositories>  
      <pluginRepository>  
        <id>maven-net-cn</id>  
        <name>Maven China Mirror</name>  
        <url>http://maven.net.cn/content/groups/public/</url>  
        <releases>  
          <enabled>true</enabled>  
        </releases>  
        <snapshots>  
          <enabled>false</enabled>  
        </snapshots>      
      </pluginRepository>  
    </pluginRepositories>  

     repositories节点下,可以有多个repository,每个repository都有一个唯一的ID,一个name,以及最重要的,远程仓库的url。

    此外<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件。

    2.在settings.xml中配置全局的远程仓库  

    在每个项目的pom中配置远程仓库 只是针对当前项目,  如果有10个项目  那就要配置10次  重复配置可以做到只配置一次,就是在settings.xml中做全局配置

    <settings>  
      ...  
      <profiles>  
        <profile>  
          <id>dev</id>  
          <!-- repositories and pluginRepositories here-->  
        </profile>  
      </profiles>  
      <activeProfiles>  
        <activeProfile>dev</activeProfile>  
      </activeProfiles>  
      ...  
    </settings>  

    * 远程仓库认证

    编辑conf/settings.xml文件

    <servers>  
      <server>  
        <id>和pom文件中repository->id元素相同</id>  
        <privateKey>/path/to/private/key</privateKey>  
        <passphrase>optional; leave empty if not used.</passphrase>  
      </server>  
    </servers>  

    server元素的id必须和pom中需要认证的repository元素完全一直。

    * 构建部署至远程仓库

      mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。

    本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。

    配置POM的distributionManagement来指定Maven的部署位置

    <project>    
      ...    
      <distributionManagement>    
        <repository>    
          <id>nexus-releases</id>    
          <name>Nexus Release Repository</name>    
          <url>http://127.0.0.1:8088/nexus/content/repositories/releases/</url>    
        </repository>    
        <snapshotRepository>    
          <id>nexus-snapshots</id>    
          <name>Nexus Snapshot Repository</name>    
          <url>http://127.0.0.1:8088/nexus/content/repositories/snapshots/</url>    
        </snapshotRepository>    
      </distributionManagement>    
      ...    
    </project>    

    Maven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定。

    Maven会根据你项目的版本来判断将构件分发到哪个仓库。

     一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:

    <settings>    
      ...    
      <servers>    
        <server>    
          <id>nexus-releases</id>    
          <username>username</username>    
          <password>password</password>    
        </server>    
        <server>    
          <id>nexus-snapshots</id>    
          <username>username</username>    
          <password>password</password>    
        </server>      
      </servers>    
      ...    
    </settings>  

    * 镜像

    <settings>  
    ...  
      <mirrors>  
        <mirror>  
          <id>maven-net-cn</id>  
          <name>Maven China Mirror</name>  
          <url>http://maven.net.cn/content/groups/public/</url>  
          <mirrorOf>central</mirrorOf>  
        </mirror>  
      </mirrors>  
    ...  
    </settings>  
  • 相关阅读:
    Android View 阴影的总结
    清晰的教你如何将 Maven 项目上传至 中央仓库以及版本更新
    简单粗暴的上传项目至 Github
    App自动更新(DownloadManager下载器)
    类型判断
    前端防御XSS
    window.location.href/replace/reload()/页面跳转+替换+刷新
    对数组排序进行"洗牌"(随机排序)
    iframe跨域上传图片
    Vim 新手节省时间的小技巧
  • 原文地址:https://www.cnblogs.com/yangxia-test/p/4409833.html
Copyright © 2011-2022 走看看