关于 maven

慕课网《项目管理利器——maven》笔记

项目管理利器 maven

maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

  • setting.xml 主要用于配置 maven 的yu运行环境等一系列通用的属性,是全局级别的配置文件
  • pom.xml 主要描述了项目的 maven 坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件
常见命令 mvn-
  1. v 查看 maven 版本
  2. compile 编译
  3. test 测试
  4. package 打包
  5. clean 删除target【maven生成的文件】
  6. install 将jar包安装到本地仓库中
  • 自动构建项目-创建目录的两种方式
    archetype:generate :按照提示进行选择
    archetype:generate -DgroupId=组织名
    -DartifactId=项目名-模块名【当前maven项目在组织中的唯一标识】
    -Dversion=版本号
    -Dpackage=包名
maven 中的坐标和仓库
  • 坐标
    通过 groupId 、artifactId、version 定位

  • 仓库
    本地仓库和远程仓库:本地仓库中找不到需要的构件则去 maven 的全球中央仓库中查找,查找到后会下载到本地仓库供使用,若远程中央仓库也找不到就会报错

  • 镜像仓库
    提供和 maven 中央仓库一样的功能,setting.xml 中配置mirror

  • 更改仓库位置
    maven 从远程仓库下载的构件默认存放在当前用户目录的 .m2/repository 目录当中的,若要修改,则修改settings.xml中的<localRepository>本地仓库路径</localRepository> 标签内的本地仓库路径为新创建的文件路径。

完整的项目构建过程

清理、编译、测试、打包、集成测试、验证、部署

maven 生命周期

clean 清理项目

1. pre-clean        执行清理前的工作  
2. clean            清理上一次构建生成的文件  
3. post-clean       执行清理后的文件

default 构建项目【最核心】

compile、test、package、install(安装到本地仓库)

site 生成项目站点【根据POM中的信息自动生成一个站点】

pre-site        生成项目站点前要完成的工作  
site            生成项目的站点文档  
post-site       生成项目站点后要完成的工作  
site-deploy     发布生成的站点到服务器上
pom.xml 常用元素

pom.xml 是maven项目的核心管理文件,用于项目描述、组织管理、 依赖管理、构建信息的管理。

//模型版本,指定了当前pom的版本
<modelVersion>4.0.0</modelVersion>

<!--坐标信息-->

//定义当前 maven 属于哪一个实际的项目,maven 项目体现的是模块化的概念,一个实际的项目会被划分为很多的模块【域名反写+项目名】
<groupId>com.baidu</groupId>

//模块标识【项目名+模块名】
<artifactId>loan_manage</artifactId>

//当前项目版本号 大版本号.分支版本号.小版本号
    -SNAPSHOT(快照版本)
    -alpha(内测版)
    -beta(公测版)
    -Releage(稳定版)
    -GA(正式发布
<version>0.0.1-SNAPSHOT</version>

//打包的机制 默认是jar
<packaging>jar</packaging>
          
//项目的描述名称, Maven产生的文档时候使用 
<name>loan_manage</name>

//项目主页的URL, Maven产生的文档用
<!--<url>http://xxxxxx</url>-->

//项目的详细描述, Maven 产生的文档用。
<description>Spring Boot project</description>

//开发人员信息    
<developers></developers>>

//许可证信息
<licenses></licenses>

//组织信息
<organization></organization>

//依赖列表
 <dependencies>
        //依赖项
     <dependency>
            //坐标信息
        <groupId>org.submail.ecf</groupId>
        <artifactId>org.apache.httpcomponents.httpclient</artifactId>
        <version>4.3.5</version>

         //设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 
        <optional>false</optional>  

         //maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
         //scope包含如下的取值:compile(编译范围,默认 编译、测试、运行都有效)、provided(已提供范围 测试和编译有效)、runtime(运行时范围 测试和运行时有效 )、test(仅在测试范围)、system(系统范围 测试和编译有效 与本地系统相关联,可移植性差)
        <scope>test</scope>  
        
       //屏蔽依赖关系。【该标签下可屏蔽多个依赖】 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 ;再比如A依赖B,B依赖C,C对于A来说就是传递依赖,如果A不想依赖C就可以使用这个标签
        <exclusions>  
            <exclusion>  
                <groupId>C_groupId</groupId>  
                <artifactId>C_artifactId</artifactId>  
            </exclusion>  
        </exclusions>  
    </dependency>
    
 </dependencies>


   //继承-自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖
    (必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过
        group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息。 --> 
    <dependencyManagement> 
        <dependencies> 
            <!-- 参见dependencies/dependency元素 --> 
            <dependency> 
            </dependency> 
        </dependencies> 
    </dependencyManagement> 
    
    
    <build>
        //插件列表
     <plugins>
            <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
     </plugins>
    </build>
    
    
//父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。
     坐标包括group ID,artifact ID和 version。 
<parent>
    //被继承的父项目的全球唯一标识符
    <groupId>org.springframework.boot</groupId>   
    //被继承的父项目的构件标识符 
    <artifactId>spring-boot-starter-parent</artifactId>
    //被继承的父项目的版本 
    <version>1.5.6.RELEASE</version>
    //父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。
         Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),
         然后在本地仓库,最后在远程仓库寻找父项目的pom。 
    <relativePath/> <!-- lookup parent from repository -->
</parent>
依赖传递
比如A依赖B,B依赖C,C对于A来说就是传递依赖,A会同时依赖B&C
依赖冲突
A和B依赖了一个构件的不同版本
1. 短路优先:优先解析路径短的版本
    A->B->C->X(jar)
    A->D->X(jar)            【优先】

2. 先声明优先:如果路径长度相同,则谁先声明,先解析谁  
    声明指 dependency 标签先后顺序
聚合和继承
  • 聚合:将多个项目 install,将其安装到本地仓库中,必须对其依次进行 install 命令,maven 中有一种方式,可以将其放到一起运行,叫聚合。
    新建项目->修改pom.xml中的packageing标签jar为pom->新增

      //模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径   
      <modules>
          <modules>A子项目相对路径</modules>
          <modules>B子项目相对路径</modules>
          <modules>C子项目相对路径</modules>
      </modules>
    

    ->clean install 会进行三次构建 依次生成A、B、C三个jar并将其安装到本地仓库中

  • 继承
    将不同子项目中相同的配置提取到一个公共的父项目中
    父:dependencyManagement 标签
    子:parent 标签


关于pom.xml文件中标签的详细说明可参考:
http://blog.csdn.net/u012152619/article/details/51485297
https://www.cnblogs.com/hafiz/p/5360195.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,286评论 6 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,801评论 6 342
  • |-1-更新内容[6.从仓库解析依赖的机制(重要)] 1Maven仓库作用 仓库用来存储所有项目使用到构件,在ma...
    zlcook阅读 6,050评论 0 25
  • 这辈子从来没见过 几十个人同时对我高喊“我爱你”! 这辈子从来没见过 1000人同时手写家书! 这辈子从来没见过 ...
    S小妖阅读 754评论 0 4