• Maven


    Maven

    资料格式:

    • 配置文件

    com.itheima

    • java代码

      statement stat = con.createstatement ();

    • 示例

      com.itheima

    • 命令

      mvn test

    Maven简介

    传统项目管理状态分析

    • jar包不统一,jar包不兼容
    • 工程升级维护过程操作繁琐

    Maven是什么

    Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

    POM (Project Object Model) :项目对象模型

    image-20220123113440744

    Maven的作用

    • 项目构建:提供标准的、跨平台的自动化项目构建方式
    • 依赖管理:方便快捷的管理项目依赖的资源**(jar包)**,避免资源间的版本冲突问题
    • **统一开发结构:**提供标准的、统一的项目结构

    Maven下载:

    官网地址:(https://maven.apache.org/)

    Maven配置文件

    image-20220123142435949

    image-20220123142444872

    Maven基础概念

    仓库

    用于存储资源,包含各种jar包

    中央仓库:是开源/共享的

    私服仓库:公司内部的 提供访问速度

    image-20220123143434973

    坐标

    用于描述仓库中资源的位置

    Maven坐标主要组成

    • **groupld:**定义当前Maven项目录的包名称(通常是域名反写,例如: org.mybatis)
    • **artifactld:**定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
    • **version:**定义当前项目版本号
    • **packaging:**定义该项目的打包方式 (较少用)

    Maven坐标作用:

    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

    第一个Maven项目(手工)

    image-20220123145845531

    在src同层目录下创建pom.xml

    包含有groupid、artifactId、version 、[packaging] 标签组成

    Maven项目构建命令

    Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
    mvn compile #编译
    mvn clean #清理
    mvn test #测试
    mvn package #打包
    mvn install #安装到本地仓库

    ending

    Maven项目(IDEA生成)

    image-20220123183927683

    创建Tomcat运行maven web

    依赖管理

    也就是在pom.xml文件里面添加

    依赖配置

    image-20220123205907570

    依赖传递

    引用其他项目的jar包 只需引用jar包的groudId、artifectId、version

    **直接依赖:**在当前项目中通过依赖配置建立的依赖关系
    **间接依赖:**被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

    依赖传递冲突问题
    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

    可选依赖

    image-20220123211040099
    <optional>trueoptional>  
    
    • 1

    排除依赖

    image-20220123211653896
    <exclusions>需要排除的坐标,不需xexclusions>
    
    • 1

    依赖范围

    <scope>scope>
    
    • 1

    依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围作用范围

    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
    scope主代码测试代码打包范例
    compile(默认)YYYlog4j
    testYjunit
    providedYYservlet - api
    runtimeYjdbc
    依赖范围传递性

    image-20220124112123154

    生命周期与插件

    项目构建生命周期

    一次构建过程经历了多少事件

    cmopile -> test-compile -> test -> packge -> install

    三个生命周期阶段

    1. clean:清理工作
    2. default:核心工作,例如编译,测试,打包,部署等
    3. site:产生报告,发布站点等

    default生命周期阶段执行指令

    image-20220124114733993

    插件

    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
    • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能

    Maven高级

    分模块开发与设计(重点)

    工程模块与模块划分

    新建一个模块进行把整合的进行分类模块拆分

    • 分模块开发
      • 模块中仅包含当前模块对应的功能类与配置文件
      • spring核心配置根据模块功能不同进行独立制作
      • ◆当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
      • web.xml需要加载所有的spring核心配置文件
    ssm_pojo拆分
    • 新建模块
      • 拷贝原始项目中对应的相关内容到ssm_pojo模块中
        实体类(User)
        配置文件(无)
    ssm_dao拆分

    新建模块

    拷贝原始项目中对应的相关内容到ssm_dao模块中

    数据层接口(UserDao)

    配置文件:保留与数据层相关配置文件(3个)
    注意:分页插件在配置中与SqlSessionFactoryBean绑定,需要保留

    • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
      • spring
      • mybatis
      • spring整合mybatismysql
      • druid
      • pagehelper
      • 直接依赖ssm_pojo (对ssm_pojo模块执行install指令,将其安装到本地仓库)
    ssm_serive拆分
    • 新建模块

    • 拷贝原始项目中对应的相关内容到ssm_service模块中

      • 业务层接口与实现类(UserService、UserServicelmpl)配置文件:保留与数据层相关配置文件(1个)

      • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标

      ​ spring

      ​ junit

      ​ spring整合junit

      ​ 直接依赖ssm_dao (对ssm_dao模块执行install指令,将其安装到本地仓库)间接依赖ssm_pojo (由ssm_dao模块负责依赖关系的建立)

    • 修改service模块spring核心配置文件名,添加模块名称,格式: applicationContext-service.xml

    • 修改dao模块spring核心配置文件名,添加模块名称,格式: applicationContext-dao.xml

    • 修改单元测试引入的配置文件名称,由单个文件修改为多个文件

    ssm_conctroller拆分

    新建模块(使用webapp模板)

    拷贝原始项目中对应的相关内容到ssm_controller模块中

    • 表现层控制器类与相关设置类(UserController、异常相关……)

    • 配置文件:保留与表现层相关配置文件(1个)、服务器相关配置文件(1个)

      • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标

      • spring

      • springmvcjacksonservlet

      • tomcat服务器插件

      • 直接依赖ssm_service (对ssm_service模块执行install指令,将其安装到本地仓库)

      • 间接依赖ssm_dao、ssm_pojo

    • 修改web.xml配置文件中加载spring环境的配置文件名称,使用*通配,加载所有applicationContext-开始的配置文件

    聚合(重点)

    多模块构建维护

    image-20220124140213357

      
    <packing>pompacking>
    
    
    <modules>
       
    	<module>    module>
        <module>    module>
        <module>    module>
        <module>    module>
    modules>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    若工程没有写pacaking 打包方式 默认是jar包

    模块类型

    pom

    war

    jar

    继承(重点)

    模块依赖维护

    继承的作用:

    通过继承可以在子工程中用父工程中的配置

    • 在子工程中配置继承关系

    制作方式:

    • 子工程声明其父工程坐标与对应的位置
    
    <parent>
        <groupId>com.kcsgroupId>
        <artifactId>ssmartifactId>
        <version>1.0-SNAPSHOTversion>
        
        <relativePath>../ssm/pom.xml  (父工程的pom文件,y用相对路径)relativePath>
    parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    继承依赖定义

    • 父工程中定义依赖关系 定义子工程坐标
    
    <dependencyManagement>
        
        <dependencies>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>5.1.9.RELEASEversion>
            dependency>
        <dependencies>
    <dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    继承依赖使用

    • 子工程中定义依赖关系**,无需邪出版本号**,版本在父工程中控制,维护时只要对父工程中的版本进行修改就可以了
    <dependencies>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
            dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    继承的资源

    image-20220124193048050

    继承与聚合比较

    • 作用
      聚合用于快速构建项目

      ​ 继承用于快速配置

      相同点

      ​ 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

      ​ 聚合与继承均属于设计型模块,并无实际的模块内容

    • 不同点:
      聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些

      ​ 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

    属性

    属性统一的重要性

    属性类别
    1. 自定义属性

      作用: 等同于定义变量,方便统一维护

      
      <properties>
          <spring.version>5.1.9.RELEASEspring.version>
          
          <junit.version>4.12junit.version>
      properties>
      
      <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-contextartifactId>
          <version>${spring.version}version>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    2. 内置属性

      作用: 使用maven内置属性,快速配置

      
      ${basedir}
      ${version}
      
      • 1
      • 2
      • 3
    3. Setting属性

      作用: 使用maven配置文件setting.xml中的标签属性,用于动态配置

      
      ${settings.localRepository}
      
      • 1
      • 2
    4. Java系统属性

      作用: 读取java系统属性

      
      ${user.home}
      
      mvn help:system
      
      • 1
      • 2
      • 3
      • 4
    5. 环境变量属性

      作用: 使用maven配置文件setting.xml中的标签属性,用于动态配置

      
      ${env.JAVA_HOME}
      
      mvn help:system
      
      • 1
      • 2
      • 3
      • 4

    版本管理

    工程版本

    • SNAPSHOT(测试阶段版本)

      项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
      快照版本会随着开发的进展不断更新

    • RELEASE(发布版本)

      项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

    工程版本号约定

    • 约束规范

      ​ <主版本>.<次版本>.<增量版本>.<里程碑版本>
      ​ 主版本:表示项目重大架构的变更,如: spring5相较于spring4的迭代

      ​ 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞

      ​ 增量版本:表示有重大漏洞的修复
      ​ 里程碑版本:表明一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试>

    示例:5.1.1.RELEASE

    资源配置

    资源配置多文件维护

    配置文件应用pom属性

    作用: 在任意配置文件中加载pom文件中定义的属性

    
    ${jdbc.url}
    
    
    
    
    
    <resources>
        <resource>
            
            <directory>${project.basedir}/src/main/resourcesdirectory>
            
            <filtering>truefiltering>
        resource>
    resources>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 配置文件中读取pom属性值
      • 在pom文件 中设定配置文件路径
      • 开启加载pom属性过滤功能
      • 使用${属性名}格式引用pom属性

    多环境开发配置

    多环境配置

    
    <profiles>
        
        <profile>
            
            <id>pro_envid>
            
            <properties>
                <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_dbjdbc.url>
            properties>
            
            <activation>
           		<activeByDefault>trueactiveByDefault>
            activation>
        profile>
        
        <profile>
            <id>dev_envid>
              <properties>
                <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_dbjdbc.url>
            properties>
        profile>
    profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    加载指定环境

    作用: 加载指定环境配置

    执行构建命令并指定加载对应环境配置信息

    
    mvn 指令 –P 环境定义id
    
    mvn install -p pro_env
    
    • 1
    • 2
    • 3
    • 4

    跳过测试

    应用场景

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

    命令

    mvn 指令 -D skipTests
    
    • 1

    ps: 执行的指令生命周期必须包含测试环节

    操作按钮

    image-20220124201921414

    
    <plugin>
        <artifactId>maven-surefire-pluginartifactId>
        <version>2.22.1version>
        
        <configuration>
            <skipTests>trueskipTests>
            <includes> 
                <include>**/User*Test.javainclude>
            includes>
            <excludes>
           		<exclude>**/User*TestCase.javaexclude>
                  
            excludes>
        configuration>
    plugin>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    私服(重点)

    安装

    Nexus

    
    nexus.exe /run nexus
    
    http://localhost:8081
    
    • 1
    • 2
    • 3
    • 4
    • 修改基础配置信息

      安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口 ,修改端口号

    • 修改服务器运行配置信息

      安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间

    私服获取资源

    • 宿主仓库(自己的仓库)

      ​ 保存无法从中央仓库获取的资源

      ​ 自主研发

      ​ 第三方非开源项目

    • 代理仓库 proxy

      ​ 代理远程仓库,通过nexus访问其他公共仓库

    • 仓库组group

      ​ 将若干个仓库组成一个群组,方便获取数据

      ​ 仓库组不能保存资源,设计型仓库

    资源上传

    上传的信息

    • 保存的位置
    • 资源文件
    • 对应坐标

    idea上传资源和下载资源

    本地仓库访问私服仓库
    • 访问私服的用户名和密码

    • 上传的位置(宿主地址)

      
      <servers>
          <server>
              <id>heima-releaseid>
              <username>用户名username>
              <password>密码password>
          server>
          <server>
              <id>heima-snapshotsid>
              <username>用户名username>
              <password>密码password>
          server>
      servers>
      
      <mirrors>
          <mirror>
              <id>nexus-heimaid>
              <mirrorOf>*mirrorOf>  
              <url>http://localhost:8081/repository/maven-public/url>  
          mirror>
      mirrors>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
    下载资源时
    • 访问私服的用户名和密码
    • 下载的仓库组地址
    • 下载的地址配置到本地地址
    • 上传的地址配置到工程地址

    访问私服配置(项目工程访问私服)

    标签:distributionManagement

    
    <distributionManagement>
        
        <repository>
            <id>heima-releaseid>
            <url>http://localhost:8081/repository/heima-release/url>
        repository>
        
        <snapshotRepository>
            <id>heima-snapshotsid>
            <url>http://localhost:8081/repository/heima-snapshots/url>
        snapshotRepository>
    distributionManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    发布指令:deploy
    http://localhost:8081/repository/maven-public/  
      
    
    • 1
    • 2
    ~~~
    下载资源时
    • 访问私服的用户名和密码
    • 下载的仓库组地址
    • 下载的地址配置到本地地址
    • 上传的地址配置到工程地址

    访问私服配置(项目工程访问私服)

    标签:distributionManagement

    
    <distributionManagement>
        
        <repository>
            <id>heima-releaseid>
            <url>http://localhost:8081/repository/heima-release/url>
        repository>
        
        <snapshotRepository>
            <id>heima-snapshotsid>
            <url>http://localhost:8081/repository/heima-snapshots/url>
        snapshotRepository>
    distributionManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    发布指令:deploy
  • 相关阅读:
    Redis缓存那点破事 | 绝杀面试官 25 问!
    MySQL索引、事务与存储引擎
    刚爆火就下线的 ZAO 换脸,背后是另一场技术人的狂欢
    客流人数管理新趋势:景区客流采集分析系统的功能特点
    Eigen入门
    OPTEE:TA镜像的签名和加载-下(六)
    方舟开服教程win
    Python网页开发神器fac 0.2.8、fuc 0.1.28新版本更新内容介绍
    良好的分布式cahce系统中,一致性hash算法需要满足什么?
    NRF52840 SOC 在空气净化市场应用的发展趋势
  • 原文地址:https://blog.csdn.net/qq_56098191/article/details/127832311