1、Maven

什么是Maven

  • Maven是一款自动化构建工具,专注服务于Java平台的项目构建依赖管理
  • 项目构建:
    • 项目构建不等同于项目创建,项目创建是一瞬间完成,项目构建是一个过程,这个过程包含以下7个步骤
    • 项目构建步骤
      • 清理
      • 编译
      • 测试
      • 报告
      • 打包
      • 安装
      • 部署
  • 依赖管理:jar包之间依赖【项目之间依赖】

maven的相关配置

在官网下载maven然后解压
在这里插入图片描述
把maven的目录配置到环境变量中
在这里插入图片描述
打开setting.xml文件进行相关的配置:

指定仓库,默认的仓库是

C:\Users\pandi.m2\repository

在这里插入图片描述
指定阿里镜像

    <mirror>
       <id>nexus-aliyun</id>
       <mirrorOf>*</mirrorOf>
       <name>Nexus aliyun</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

指定jdk版本

<profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>

idea整合maven

File=>settings=>Maven
在这里插入图片描述

新建maven项目

idea的版本过高的话会没有新建maven的那个选项,有Maven Archetype 这时候点上面的那个New Project创建maven项目
在这里插入图片描述
下面就是maven项目创建的界面了
在这里插入图片描述

maven 核心概念

pom概述

  • pom:project object model【项目对象模型:将整个项目封装为对象模型,便于maven管理项目】
    • dom:document object model【文档对象模型】
  • pom.xml基本结构
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--    定义父工程坐标-->
    <parent>
        <artifactId>maven_pro</artifactId>
        <groupId>com.atguigu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <!--    定义模块版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--    定义模块名称-->
    <artifactId>Hello</artifactId>
	<!-- 定义打包方式-->
    <packaging>pom</packaging>
    
    <!-- 定义聚合子工程【只能在父工程中定义聚合】-->
    <!--
        <modules>
            <module>Hello</module>
            <module>HelloFriend</module>
            <module>MakeFriend</module>
            <module>OurFriend</module>
        </modules>
	-->
    
    <!--定义坐标父标签-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

Maven工程约定目录结构

  • Java圈不成文规则【约束(约定)>配置>代码】

  • 普通java工程

    • 项目名称【模块名称】
      • src【书写源代码】
        • main【主程序代码】
          • java【java代码】
          • resources【配置文件】
        • test【测试代码】
          • java【java代码】
      • pom.xml【书写maven配置文件】
      • target【编译后】
        在这里插入图片描述
        web版maven工程
  • 项目名称【模块名称】

    • src【书写源代码】
      • main【主程序代码】
        • java【java代码】
        • resources【配置文件】
        • webapp
          • WEB-INF
            • web.xml
      • test【测试代码】
        • java【java代码】
    • pom.xml【书写maven配置文件】
    • target【编译后】
      在这里插入图片描述

Maven的插件与目标

  • 插件
    • 本质:由jar包和配置文件组成
    • 作用:实现maven功能
  • 目标
    • 插件与目标关系:每个插件都能实现多个功能,每个功能就是一个插件目标。

Maven生命周期

  • 概述:
    • Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。
    • Maven有三套相互独立的生命周期,相互不影响,分别是:
      • Clean Lifecycle在进行真正的构建之前进行一些清理工作。
      • Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。
      • Site Lifecycle生成项目报告,站点,发布站点。
  • 注意:执行生命周期中后面构建环节,会默认执行前面构建环节【但:不会跨越独立生命周期执行】

Maven仓库【重点】

  • 仓库分类

    • 本地仓库:为当前本地计算机提供服务的仓库
    • 远程仓库:
      • 私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
        • 局域网:当前一间教室或某几间教室联网
        • 万维网:当前开通“外网”,可与全世界联网
      • 中央仓库:架设在Internet上,为全世界所有Maven工程服务。
      • 中央镜像仓库:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
  • 仓库文件【jar包&配置文件】

    ① Maven的插件

    ② 我们自己开发的项目的模块

    ③ 第三方框架或工具的jar包

Maven坐标【重点】

  • 作用:使用坐标,将仓库中jar包引入到当前项目中【模块】
  • 语法:在pom.xml文件中,dependencies标签内部添加dependency标签即可
  • dependency标签内部详情:
    • groupId:当前公司或组织域名倒序
    • artifactId:当前项目名称
    • version:当前项目版本
<!--定义坐标父标签-->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
  • 注意:
  • g-a-v:本地仓库jar包位置
  • a-v:jar包全名
  • 坐标与jar包对应关系:一个坐标对应“多”个jar包
  • 坐标查询:http://mvnrepository.com

Maven依赖【重点】

  • 基本概念

  • 当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。

  • 如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。

  • 依赖语法

  • 在dependencies中添加一个子标签:

    • compile(默认就是这个范围):表示jar包在main、test、tomcat下均有效
    • test:表示jar包只能在test目录下有效【不会实现间接依赖】
    • provided:表示当前jar包只能main、test下有效【在tomcat下无效】【不会实现间接依赖】
      • servlet-api
  • 依赖传递性

  • 路径最短者优先【就近原则】
    在这里插入图片描述

  • 先声明者优先原则
    在这里插入图片描述
    在这里插入图片描述

  • 统一管理版本号

<properties>
    <spring-version>5.3.3</spring-version>
</properties>
 <dependencies>
  		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-version}</version>
        </dependency>
</dependencies>

Maven继承

打包方式:在pom.xml中添加标签

  • jar:java工程
<packaging>jar</packaging>
  • war:web工程
<packaging>war</packaging>
  • pom:父工程
<packaging>pom</packaging>
  • 方式一
    • 在父工程中pom.xml中导入相关jar包即可,在子工程就会自动导入【一定导入】
      • 注意:如子工程中存在相同的jar包,会覆盖父工程jar包
  • 方式二
    1. 先在父工程中定义需要被继承jar包
<!--    方式二-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.在子工程中添加需要继承的jar包

<parent>
    <artifactId>maven_pro</artifactId>
    <groupId>com.atguigu</groupId>
    <version>1.0-SNAPSHOT</version>
    <!--设置父工程pom.xml路径【相对路径】-->
    <relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <!--不能写版本号-->
    </dependency>
</dependencies>

注意:子工程中不能书写jar包的版本号

Maven聚合
  • 语法:在父工程中添加标签

  • 作用:清楚或安装父工程同时也会清楚或安装子工程

  • 注意:

    • 安装顺序由依赖顺序决定,而不是配置顺序决定

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-983bQUpU-1651832271158)(01Maven.assets\image-20220506165222343.png)]

    • 清楚父工程时,只会清楚编译后代码【target目录】,不会清楚仓库已安装的jar包

  • 示例代码

<modules>
    <module>Hello</module>
    <module>HelloFriend</module>
    <module>MakeFriend</module>
    <module>OurFriend</module>
</modules>

在IDEA中创建Maven版的web工程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值