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.在命令行中通过命令执行

相关推荐
XH华1 小时前
C语言第十一章内存在数据中的存储
c语言·开发语言
叫我阿柒啊3 小时前
Java全栈开发面试实战:从基础到微服务架构
java·vue.js·spring boot·redis·git·full stack·interview
小凡敲代码3 小时前
2025年金九银十Java面试场景题大全:高频考点+深度解析+实战方案
java·程序员·java面试·后端开发·求职面试·java场景题·金九银十
AndrewHZ3 小时前
【python与生活】如何用Python写一个简单的自动整理文件的脚本?
开发语言·python·生活·脚本·文件整理
拉法豆粉3 小时前
在压力测试中如何确定合适的并发用户数?
java·开发语言
枯萎穿心攻击3 小时前
Unity VS UE 性能工具与内存管理
开发语言·游戏·unity·ue5·游戏引擎·虚幻·虚幻引擎
爱上纯净的蓝天4 小时前
迁移面试题
java·网络·c++·pdf·c#
老赵的博客4 小时前
c++ 常用接口设计
开发语言·c++
binbinaijishu884 小时前
Python爬虫入门指南:从零开始的网络数据获取之旅
开发语言·爬虫·python·其他
chenglin0164 小时前
Logstash_Input插件
java·开发语言