• Maven实战读书笔记(二):Maven坐标与仓库


    2.1 Maven坐标

    Maven坐标是Maven用来表示一个组件依赖的标示。
    Maven通过下面几个元素定义坐标:groupId、artifactId、version、packaging、classifier.

    groupId:定义当前Maven项目隶属的实际项目。不应该是组织或公司(一个公司有很多项目,每个项目有很多模块)。

    artifactId:定义实际项目的一个Maven模块,推荐使用实际项目名称作为前缀。

    version:定义Maven项目当前所处的版本。

    packaging:定义Maven项目的打包方式,可选的有:jar(默认)、warpom,不同的打包方式会影响构建的生命周期。

    classifier:定义构建输出的一些附属构建,如javadocsources

    2.2 Maven仓库

    Maven坐标是一个构件的逻辑表示,构件的物理表示是文件,Maven通过仓库来统一管理这些文件。

    得益于坐标机制,Maven项目能够以统一的方式来使用任何构件,在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构建,这个统一位置就是仓库。

    2.2.1 仓库的分类

    Maven中的仓库分为:本地仓库和远程仓库。

    Maven根据坐标寻找构件时,先查看本地仓库是否存在该构件,存在则直接使用;否则就查找远程仓库,找到之后就下载到本地仓库;本地和远程都没找到,直接报错。

    仓库的分类

    中央仓库是Maven核心自带的远程仓库,含绝大多数开源的构件;

    私服是在局域网搭建的仓库服务器,用于代理外部的远程仓库,可以节省带宽和时间,内部的项目还能部署到私服供其他项目使用;使用私服可以加速Maven构建以及提高稳定性,内网访问不需要依赖于网络。

    其他公共服,如阿里云等。

    本地仓库:配置路径${M2_HOME}/conf/settings.xml,默认是${user.home}/.m2/repository.

    构件进入本地仓库有两种方式:Maven从远程仓库下载到本地仓库;通过在项目执行mvn install安装到本地。

    Maven而言,用户的本地仓库只有一个,但可以配置访问很多远程仓库。而中央仓库是默认的远程仓库,在$M2_HOME/lib/maven-model-builder-{version}.jarorg/apache/maven/model/pom-4.0.0.xml文件定义了,该POM也被称为超级POM

    2.2.2 仓库的布局

    构件在Maven仓库里的存储路径为:{groupId}/{artifactId}/{version}/{artifactId-version.packaging}

    2.2.3 远程仓库的配置

    通过POM文件的<repositories><repository>元素可以配置远程仓库,如:

    <repositories>
    
       <repository>
    
         <id>jboss</id>
    
         <name>jboss repository</name>
    
         <url>http://repository.jboss.com/maven2/</url>
    
         <releases>
    
           <enabled>true</enabled>
    
         </releases>
    
         <snapshots>
    
           <enabled>false</enabled>
    
         </snapshots>
    
         <layout>default</layout>
    
       </repository>
    
     </repositories>
    
    

    :必须是唯一的,默认的中央仓库id是central,如果使用了该id,会覆盖中央仓库配置。

    :执行仓库的地址

    :开发发布版本支持

    :关闭快照版本支持

    :值为default表示仓库的布局是Maven 2及Maven 3,而不是Maven 1.

    相比于发布版本,快照版本还有下面两个属性:

    <snapshots>
    
     <enabled>true</enabled>
    
     <updatePolicy>daily</updatePolicy>
    
     <checksumPolicy>ignore</checksumPolicy>
    
    </snapshots>
    

    :更新策略,默认daily,可选择有neveralwaysinterval:X (X分钟检查一次)。

    Maven检查校验和的策略,默认值是warn(校验不通过时警告),可选择还有fail(校验不通过时构建失败)、ignore(忽略校验错误)

    2.3 镜像

    如果仓库X可以提供仓库Y存储的所有内容,则认为X是Y的一个镜像。关于镜像的配置可以在${M2_HOME}/conf/settings.xml中进行配置:

    <mirrors>
    
      <mirror>
    
         <id>nexus-aliyun</id>
    
         <mirrorOf>*</mirrorOf>
    
         <name>Nexus aliyun</name>
    
         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    
       </mirror>
    
     </mirrors>
    

    :匹配远程仓库的规则,匹配成功,则使用该镜像进行代理

    Remark:由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务时,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

    

  • 相关阅读:
    Manjaro 安装与初步使用
    hp 820 G3 驱动安装不上
    Linux Mint
    PHP模板引擎原理
    报名系统跟商品购物有点类似,可以参考一下他们的ER图
    tp5接口开发流程(思路版)
    mysql中主键和外键的作用,主表和从表如何区分,以及如何使用联合查询和TP5的联合查询
    关于会员-考生-考生自定义表单-预览打印
    PHP unserialize()和serialize两者的用法
    如何解决复杂的问题?如何在未知的领域里,解决需求?
  • 原文地址:https://www.cnblogs.com/Jxwz/p/8372368.html
Copyright © 2020-2023  润新知