Maven-1

简介: Maven-1

Maven

资料格式:

  • 配置文件

com.itheima



  • java代码

statement stat = con.createstatement ();

  • 示例

com.itheima

  • 命令

mvn test



Maven简介

传统项目管理状态分析

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

Maven是什么


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

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

Maven的作用


项目构建:提供标准的、跨平台的自动化项目构建方式

依赖管理:方便快捷的管理项目依赖的资源**(jar包)**,避免资源间的版本冲突问题

**统一开发结构:**提供标准的、统一的项目结构

Maven下载:


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


Maven配置文件

f2df053b22c15d4bcf4c99b077bf2f20.png


430b70ad4b1acff5d1d09c27184fbd86.png


Maven基础概念

仓库

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

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

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



da88f6c5468312debd48f900baef528c.png

坐标

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

Maven坐标主要组成


**groupld:**定义当前Maven项目录的包名称(通常是域名反写,例如: org.mybatis)

**artifactld:**定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)

**version:**定义当前项目版本号

**packaging:**定义该项目的打包方式 (较少用)


Maven坐标作用:

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

第一个Maven项目(手工)


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

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

Maven项目构建命令


Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔

mvn compile #编译

mvn clean #清理

mvn test #测试

mvn package #打包

mvn install #安装到本地仓库


ending


Maven项目(IDEA生成)


a878f86686e93ecc11f53e102b0aa32c.png


创建Tomcat运行maven web

依赖管理

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

依赖配置

依赖传递

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

**直接依赖:**在当前项目中通过依赖配置建立的依赖关系

**间接依赖:**被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

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


可选依赖

<optional>true</optional>  <!--选择隐藏  当别人使用在是发现不了的,不会出现显示依赖-->

排除依赖

<exclusions>需要排除的坐标,不需x</exclusions>

依赖范围

<scope></scope>

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

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)


scope 主代码 测试代码 打包 范例
compile(默认) Y Y Y log4j
test Y junit
provided Y Y servlet - api
runtime Y jdbc



依赖范围传递性

生命周期与插件


项目构建生命周期

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

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


三个生命周期阶段

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



default生命周期阶段执行指令

插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认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-开始的配置文件

聚合(重点)

多模块构建维护

<!--定义该工程用于进行构建管理 在pom文件下添加下列代码-->  
<packing>pom</packing>
<!--管理工程列表-->
<modules>
   <!--具体的工程名称  顺序无关  运行结果的顺序只与模块间的依赖关系有关-->
  <module>    </module>
    <module>    </module>
    <module>    </module>
    <module>    </module>
</modules>

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

模块类型

pom

war

jar

继承(重点)

模块依赖维护

继承的作用:

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

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


制作方式:

  • 子工程声明其父工程坐标与对应的位置
<!--定义父工程 parent标签-->
<parent>
    <groupId>com.kcs</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 父工程的pom文件 -->
    <relativePath>../ssm/pom.xml  (父工程的pom文件,y用相对路径)</relativePath>
</parent>


继承依赖定义

  • 父工程中定义依赖关系 定义子工程坐标
<!--此处的依赖管理内容-->
<dependencyManagement>
    <!--所有具体的依赖-->
    <dependencies>
        <!--spring环境 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    <dependencies>
<dependencyManagement>


继承依赖使用

  • 子工程中定义依赖关系**,无需邪出版本号**,版本在父工程中控制,维护时只要对父工程中的版本进行修改就可以了
<dependencies>
        <!--spring环境-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
</dependencies>


继承的资源

继承与聚合比较

作用

聚合用于快速构建项目

继承用于快速配置


相同点

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

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


  • 不同点:
    聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己


属性

属性统一的重要性

属性类别
  1. 自定义属性

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

<!--定义自定义属性格式  properties标签中-->
<properties>
    <spring.version>5.1.9.RELEASE</spring.version>
    <!--标签名就是变量名 也就是 spring.version和junit.version-->
    <junit.version>4.12</junit.version>
</properties>
<!--调用格式 ${变量名}-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

内置属性

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

<!--调用格式-->
${basedir}
${version}


Setting属性

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

<!--调用格式-->
${settings.localRepository}

Java系统属性

作用: 读取java系统属性

<!--调用格式-->
${user.home}
<!--系统属性查询方式-->
mvn help:system

环境变量属性

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

<!--调用格式-->
${env.JAVA_HOME}
<!--环境变量属性查询方式-->
mvn help:system


版本管理

工程版本


SNAPSHOT(测试阶段版本)


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

快照版本会随着开发的进展不断更新


RELEASE(发布版本)


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

工程版本号约定

  • 约束规范


<主版本>.<次版本>.<增量版本>.<里程碑版本>

主版本:表示项目重大架构的变更,如: spring5相较于spring4的迭代


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


增量版本:表示有重大漏洞的修复

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


示例:5.1.1.RELEASE

资源配置

资源配置多文件维护

配置文件应用pom属性

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

<!--调用格式-->
${jdbc.url}
<!--开启配置文件加载pom属性-->
<!-- 配置资源文件对应的信息-->
<!--在bulid标签中-->
<resources>
    <resource>
        <!--指定配置文件对应的位置目录,使用相对路径(../) ${project.basedir}x  -->
        <directory>${project.basedir}/src/main/resources</directory>
        <!--开启对配置文件的资源加载过滤-->
        <filtering>true</filtering>
    </resource>
</resources>


  • 配置文件中读取pom属性值
  • 在pom文件 中设定配置文件路径
  • 开启加载pom属性过滤功能
  • 使用${属性名}格式引用pom属性
目录
相关文章
|
存储 Java Maven
|
数据可视化 Java 项目管理
|
5月前
|
Java 应用服务中间件 项目管理
Maven详解
Apache Maven是一个强大的Java项目管理和构建工具,它简化了项目结构、依赖管理、构建过程。Maven遵循约定优于配置原则,提供标准项目模板,自动处理依赖下载和版本控制。通过POM(Project Object Model)文件,开发人员声明项目属性、依赖、构建配置等。Maven支持多模块管理、文档生成、版本管理和构建报告。使用Maven,可以更高效地管理复杂项目,避免手动管理依赖带来的问题。此外,Maven的配置文件(settings.xml)允许设置本地仓库、中央仓库镜像和JDK版本等。
67 1
Maven详解
|
5月前
|
Java Maven 开发工具
Maven 特点
Maven是一个遵循统一规则、可扩展的Java项目管理工具,强调依赖管理和自动化更新。它拥有庞大的库资源,支持JAR、WAR等输出类型的构建,并能自动生成项目站点和报告。Maven无缝集成版本控制系统,实现发布管理和并行构建,提升构建速度。其错误报告详细,提供链接至解决方案。子项目可继承父项目依赖,无需重复指定版本号,保证向后兼容性。
|
Java Maven 容器
关于Maven,你真的了解它吗?(下)
关于Maven,你真的了解它吗?(下)
|
Java 应用服务中间件 Maven
关于Maven,你真的了解它吗?(上)
关于Maven,你真的了解它吗?(上)
|
Java 应用服务中间件 Apache
零基础快速理解Maven
零基础快速理解Maven
|
Oracle Java 关系型数据库
Maven是什么
Maven是什么,maven的安装,maven的仓库配置方式
Maven是什么