《Maven实战》阅读笔记(二)

Maven的仓库

1.何为Maven仓库

Maven的插件、依赖都被称为构件,由坐标在Maven中唯一确定。而仓库我理解为,一个由Nexus搭建的文件分发系统。

2.远程仓库

Maven仓库可以分为远程仓库和本地仓库,Maven先去本地仓库中找依赖,若找不到在去找远程仓库中找,若都找不到就会报错。

// 配置远程仓库(该属性在pom.xml和setting.xml均可配置,但作用范围不同)

<repositories>
    <repository>
        <id>central</id>//id是唯一
        <name>xxx</name>
        <url>http://</url>
        <snapshots>
            <enable>false</enable>//是否允许拉取快照版本
        </snapshots>
    </repository>
</repositories>

远程仓库(私服)认证(id与repository中的id需要一致)

//在setting.xl中配置
<servers>
    <server>
        <id>xx</id>
        <name>name</name>
        <password>password</password>
    </server>
</servers>

部署到远程仓库,认证方式与仓库认证一致,id需要一致。

<distributionManagement>
    <repository>
        <id>id</id>
        <name>name</name>
        <url>url</url>
    </repository>
</distributionManagement>
3.快照版本SNAPSHOT的作用

小刘和小郑一起开发一个项目,小郑开发的模块B依赖于小刘开发的模块A。小郑如何获得小刘开发的最新的代码?

小郑不断询问小刘,你部署的最新版本号是多少?

要求小刘不断覆盖之前的部署?但小郑本地仓库发现版本号一致,不会去拉远程仓库的构件。

小刘可以将自己的项目版本号设置为SNAPSHOT版本,当他上传时,Maven会将他打上时间戳。
例如2.1-SNAPSHOT.jar,变成2.1-20201212.121212-12(2020年12月12号12时12分12秒第12次快照)。
这样小郑依赖于2.1-SNAPSHOT.jar时,Maven就会去拉取最新的版本,不需要而额外的操作。

4.Maven解析依赖的机制

1). 当依赖范围是System时,maven直接从本地文件系统解析。
2). 当依赖版本号为显示指定时,例如:xxx-2.1.jar,maven会计算出路径,先在本地仓库拉取。如果本地仓库找不到,就去远程仓库拉。
3). 当依赖版本号为LATEST或者为RELEASE时,将远程仓库的该依赖的元信息与本地该依赖元信息结合,算出该依赖的版本号。基于该依赖版本,去本地找,找不到去远程遍历拉取。

LATEST:最新的版本号,包含快照版本

RELEASE:最新发行版本

4). 当依赖版本是SNAPSHOT时,将本地元信息与远程仓库信息结合,算出最新的版本号,然后基于该版本找依赖。

5.设置镜像(代理)仓库

当一个仓库包含了另一个仓库的所有内容,那么就称其为代理。例如我们可以使用淘宝的Maven镜像仓库,解决中央仓库拉取慢的问题

//seting.xml中配置
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>//镜像仓库地址
      <mirrorOf>central</mirrorOf>//要代理的仓库的id        
    </mirror>
</mirrors>

Maven的生命周期与插件

maven把一个项目大致分为清理、初始化、测试、编译、打包、集成测试、安装、部署、站点这几个构建阶段。maven针对每个阶段提供plug-in机制,maven本生不作任何代码的实现,
他规定了一定的规范。

mvn有三套互相独立的生命周期:clean、default、site。

#clean包含pre-clean(清理前的准备)、clean(清理上一次构件生成的文件)、post-clean(清理后的工作)这三个阶段
mvn pre-clean
mvn clean 
mvn post-clean


#default包含很多阶段,我捡几个重要的列举一下

#compile:编译源码,输出到classpath目录
#test:使用单元测试框架运行测试
#package:将编译好的代码打包成可发布格式,例如jar、war
#install:将包安装到本地,供其他项目使用
#deploy:将包复制到远程仓库,供其他开发人员使用。



#site生命周期基于pom信息,能够生成站点文档,方便团队交流。我用的较少,site阶段不再赘述

举例说明使用命令行与maven生命周期的绑定

mvn clean deploy #此命令将会执行,clean周期的pre-clean和clean阶段;以及default的所有阶段。因为deploy是default的最后一个阶段
mvn clean package #此命令执行clean的pre-clean和clean阶段;以及default的从validate到package的所有阶段

maven会内置一些插件与生命周期绑定。当然可以使用plug属性标签自定义插件绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值