【学】Maven 笔记 | 不食花生的猫

第一章 Maven 基础


网页地址

  1. 视频地址:黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven_哔哩哔哩_bilibili
  2. 依赖查询:https://mvnrepository.com/
  3.  Maven :Maven – Available Plugins

  4.  Nexus :Download

  5. 有道云笔记:https://note.youdao.com/s/avkgonCe

Maven 标签

resources: 资源文件配置信息

resource: 资源文件配置信息

testResources: test 资源文件配置信息

testResource: test 资源文件配置信息

  以下内容属于 dependencies  

groupId: 【组织 ID】定义当前 Maven 项目隶属组织名称(通常是域名反写,例如 org.mybaits)

artifactId: 【项目 ID】定义当前 Maven 项目名称(通常是模块名称,例如 CRM、SMS)

version: 【版本号】定义当前项目的版本号

packaging: 【jar/war】定义该项目的打包方式

optional: 是否对上级隐藏 true / false

exclusions: 排除掉某些

exclusion: 具体排除掉哪一个 ()

  注意:不写版本 见代码片段 1.2  

scope: 范围

  • 在主程序范围能不能用 【compile  文件夹范围内 】
  • 在测试范围能不能用【 test 】
  • 是否参与打包【 package 】

dependencyManagement:【依赖管理】 在 父pom 中做依赖管理

build

  • build 构建
  • plugins 插件(们)
  • plugin 插件

代码片段 1.1


    
     …… 
     …… 
      ……   
     
        
            
             generate-test-resources 
        
    
    

表 1.1 scope 范围

scope 参数

主程序

测试程序

参与打包

典型

compile

‍♀️

‍♀️

‍♀️

log4j

test

‍♀️

junit

provided

‍♀️

‍♀️

servlet-api

runtime

‍♀️

jdbc

表 1.2 scope 以来传递中的范围问题

项目 2 \ 项目 1

compile

test

provided

runtime

compile

compile

test

provided

runtime

test

provided

runtime

runtime

test

provided

runtime

代码 1.2 排除下级依赖


    父类 组名  (定义  之后可以删除)
    父类 artifactId
    父类 版本  (定义  之后可以删除)
    
     
        
        
            a 的 groupId
            a 的 artifactId
        
    

依赖传递

  • 若 b 项目引用 a 项目作为依赖,那么 a 项目引用的依赖 b 也引用
  • 直接依赖:直接引用的依赖
  • 间接依赖:通过引用其他项目获取其他项目的依赖

依赖冲突问题

  • 深度优先原则:层级越浅优先级越高(直接依赖>间接以依赖)
  • 声明优先原则:两个间接以来全都是 2 层,那么看引用他们依赖的 a 与 b ,谁在前面使用谁的
  • 后者覆盖原则:当同一个 pom 文件中出现了同一个依赖的不同版本,后者覆盖前者
  • 对上级隐藏 :true
  • 排除下级依赖:
  1. Maven 生命周期与插件

全部过程

【学】Maven 笔记 | 不食花生的猫_第1张图片

第二章 Maven 高级


分模块开发思路

  • 将 controller 层、service 层等都单独划分为一个单独的 Maven 模块,通过接口进行连接

配置管理 | (插件同理)

配置一个新的 pom 文件用于管理所有的 pom

packaging:

  • 聚合 pom
  • 后端 jar
  • web war
 pom  


     各层级文件的名称 
    ../ssm_pojo
    ../ssm_dao
    ../ssm_service
    ../ssm_controller
    ……

继承

        在 父 pom 文件中定义所有的依赖

   父 pom: 


    
        
            也可以写自己的项目,没两样
        
        
             …… 
             …… 
             …… 
        
    

  子 pom : dependency 中不用写 version  


    …… 
     …… 
     …… 
    
      ../ssm/pom.xml 




    
         …… 
         …… 
        
    

  同理插件也可以继承,同样删除 version  

继承与聚合

  • 作用
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点
    • 聚合与继承的 pom.xml 文件打包方式均为 pom,可以将两种关系只做到同一个 pom 文件中
    • 聚合与集成均属于设计型模块,并无实际的模块内容。
  • 不同点
    • 聚合是在当前模块中的配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些模块集成了自己

第三章 自定义变量



    1.2.3



${spring.version}


${version}


${settings.localRepository}


${user.home}


第四章 版本管理


工程版本

  • SNAPSHOT(快照版本)
    • 项目开发过程中,为方便团队成员合作,解决模块间互相依赖和实时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)
    • 快照版本会随着开发的进站不断更新
  • RELEASE(发布版本)
    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,几遍进行功能的后续开发,也不会改变当前发布版本的内容,这种版本成为发布版本

功能版本号约定

  • 约定规范
    • ...
    • 主版本:表示项目重大架构的变更,如 Spring5 相较于 Spring4
    • 次版本:表示有较大的的功能增加和变化,或者全面系统的修复漏洞
    • 增量版本:表示有重大漏洞修复
    • 里程碑版本:表示一个版本的里程碑(版本内部》。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试
  • 范例
    • 5.1.9.RELEASE

第五章 多环境


配置资源文件对应信息

  • 在 pom 文件中设定配置文件路径
  • 开启加载 pom 属性过滤功能
  • 使用   ${属性名}    格式引用 pom 属性

     …… 



    
        ../ssm_dao/src/main/resources
        ${project.basedir}/src/main/resources
        true
    


jdbc.username=${jdbc.username}

定义 生产/开发 环境



    
    
        
         pro_env 
           
         url1 
        
        true
    
    
    
    
         dev_env  
         
         url2       
    
    

使用

  • maven 中加入一个新的生命周期
  • 指令为:install -P dev_env

第六章 跳过测试


使用场景

  • 整体模块功能未开发
  • 模块中某个功能未开发完毕
  • 单个功能更新调试导致其他功能失败
  • 快速打包
  • ……

使用方法

  插件:maven helper  

  1. 方案 1:直接使用 IDEA 进行屏蔽
  2. 方案 2:选中 pom 文件,右键 run以下命令:install -D skipTests
  3. 方案 3:build 中设置跳过测试

    
        
            maven-surefire-plugin
            2.22.1
            
            
                
                true
            
            
            
                
                
                    **/Demotest.java
                
                
                
                
                    **/User*Test.java
                
            
            
        
     
           

第七章 Nexus 私服搭建与使用


Nexus私服

  • 地址:Download
  • 启动:进入 bin 文件夹 nexus run
  • 访问:localhost:8081

仓库分类

  1. 宿主仓库 hosted
    1. 保存无法从中央仓库获取的资源
      1. 自主研发
      2. 第三方非开源项目
  2. 代理仓库 proxy
    1. 代理远程仓库,通过 nexus 访问其他公共仓库,例如中央仓库
  3. 仓库组 group
    1. 将若干个仓库组成一个群组,简化配置
    2. 仓库组不能保存资源,属于设计型仓库

Idea 与 Nexus 私服

  • Maven settings.xml 文件中的配置

    
        jim-release
        admin
        admin
    
    
        jim-snapshots
        admin
        admin
    



    
        jim
        *
        去 Nexus 私服仓库复制 
    
  • 发布  【 maven deploy 】 

    
    
        
        
    

第八章 其他


settings.xml

/Users/hsk/DevTools/mavenRepository nexus-aliyun central Nexus aliyun <--镜像 url --> http://maven.aliyun.com/nexus/content/groups/public/

Maven 生命周期全过程

  • validate 校验
  • initialize 初始化
  • generate-sources 生成源代码
  • process-sources 处理源代码
  • generate-resources 生成资源文件
  • process-resources 处理资源文件
  • compile 编译
  • process-classes 处理类文件
  • generate-test-sources 处理测试源代码
  • process-test-sources 生成测试源代码
  • generate-test-resources 生成测试资源文件
  • process-test-resources 处理测试资源文件
  • test-compile 编译测试源码
  • process-test-classes 处理测试类文件
  • test 测试
  • prepare-package 准备打包
  • package 打包
  • pre-integration-test 集成测试前
  • integration-test 集成测试
  • post-integration-test 集成测试后
  • verify 验证
  • install 安装
  • deploy 部署

你可能感兴趣的:(Java,maven)