关于 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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容