美文网首页
关于 maven

关于 maven

作者: _Sisyphus | 来源:发表于2018-03-10 17:34 被阅读0次

    慕课网《项目管理利器——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

    相关文章

      网友评论

          本文标题:关于 maven

          本文链接:https://www.haomeiwen.com/subject/rpdbfftx.html