8.4 Java Web(Maven P50-P57)

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具

Maven的作用

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

2.统一项目结构:提供标准、统一的项目结构

3.项目构建:标准跨平台(Linux、Windows、MacOS)的自动化项目构建方式

官网:https://maven.apache.org/

Maven的安装

1.解压apache-maven-3.6.1-bin.zip

2.配置本地仓库:修改conf/settings.xml中的<localRepository>为一个指定目录

<localRepository>/"D:\Maven\apache-maven-3.9.11\mvn_repo"</localRepository>

3.配置阿里云私服:修改conf/settings.xml中的<mirrors>标签,为其添加如下子标签

4.配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录添加到PATH环境变量

IDEA集成Maven

网上找教程即可,特别注意两点:

1.阿里云私服的<mirror>标签内容有修改,要去找最新版,否则无法找到远程仓库

2.复制文件地址时(本地仓库地址),会在地址两边加" ",要记得去掉" ",否则地址报错

Maven坐标

Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置

使用坐标来定义项目或引入项目中所需要的依赖

Maven坐标的组成:

1.groupId:定义当前Maven项目隶属组织名称(如com.itheima)

2.artifactId:定义当前Maven项目名称(模块名称)

3.version:定义当前项目版本号

Maven依赖管理

依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖

依赖配置

1.在pom.xml中编写<dependencies>标签

2.在<dependencies>标签中使用<dependecy>引入坐标

3.定义坐标的groupId,artifactId,version

4.点击刷新按钮,引入最新加入的坐标

XML 复制代码
    <!--依赖配置-->
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.18</version>
        </dependency>
    </dependencies>

依赖传递

依赖具有传递性,依赖分为直接依赖和间接依赖

有以下三个maven项目,分别为maven_projectA、maven_projectB、maven_projectC

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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>maven_projectA</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.18</version>
        </dependency>

        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>maven_projectB</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>maven_projectB</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>

        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>maven_projectC</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>
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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>maven_projectC</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.18.0</version>
        </dependency>
    </dependencies>


</project>

可以查看其依赖关系

如果A只想依赖B,而不想要间接依赖B的依赖资源,可以排除依赖,排除依赖指主动断开依赖的资源,被排除的资源无需指定版本,例如这里A不想要junit依赖

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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>maven_projectA</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.18</version>
        </dependency>

        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>maven_projectB</artifactId>
            <version>1.0-SNAPSHOT</version>
            <!-- 排除依赖-->
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>

依赖范围

以来的jar包默认情况下可以在任何地方使用,可以通过<scope></scope>设置其作用范围

1.主程序范围有效(main文件夹范围内)

2.测试程序范围有效(test文件夹范围内)

3.是否参与打包运行(package指令范围内)

生命周期

对所有的maven项目构建过程进行抽象和统一,Maven中有3套独立的生命周期

1.clean:清理工作

2.default:核心工作,如:编译、测试、打包、安装、部署等

3.site:生成报告、发布站点等

每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段

主要的生命周期阶段

1.clean:移除上一次构建生成的文件

2.compile:编译项目源代码

3.test:使用合适的单元测试框架运行测试(junit)

4.package:将编译后的文件打包,如:jar、war等

5.install:安装项目到本地仓库

在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行

执行指定生命周期的两种方式

1.在IDEA右侧的maven工具栏中,选中对应的生命周期,双击运行

2.在命令行中通过命令执行

相关推荐
huipeng926几秒前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ20 分钟前
java实现excel导入、下载模板方法
java·开发语言·excel
眠りたいです44 分钟前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
段ヤシ.1 小时前
回顾Java知识点,面试题汇总Day12(持续更新)
java·mybatis
java1234_小锋2 小时前
Spring AI 2.0 开发Java Agent智能体 - MCP(模型上下文协议)
java·人工智能·spring·spring ai
seven97_top2 小时前
两小时入门Sentinel
java·sentinel
叶小鸡2 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day1
java·开发语言
bigbearxyz2 小时前
Caused by: java.net.SocketException: Connection reset问题排查
java·keepalived·proxysql
楼田莉子3 小时前
C++17新特性:__had_include/属性/求值顺序规则
开发语言·c++·后端
香蕉鼠片4 小时前
Python进阶学习
开发语言·python