项目管理工具Maven基础

文章目录

  • [1 Maven概述](#1 Maven概述)
  • [2 Maven项目基础](#2 Maven项目基础)
    • [2.1 项目坐标](#2.1 项目坐标)
    • [2.2 项目结构](#2.2 项目结构)
    • [2.3 pom配置文件](#2.3 pom配置文件)
  • [3 Maven依赖管理](#3 Maven依赖管理)
    • [3.1 依赖配置](#3.1 依赖配置)
    • [3.2 依赖范围](#3.2 依赖范围)
    • [3.3 依赖传递和排除](#3.3 依赖传递和排除)
  • [4 Maven生命周期](#4 Maven生命周期)
  • [5 参考资料](#5 参考资料)

1 Maven概述

Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具,通过一小段描述信息来管理项目的构建、报告和文档。

  1. 方便的依赖管理:方便快捷的管理项目依赖的资源(jar包)。

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

  3. 标准的项目构建流程:提供标准的、跨平台的自动化项目构建方式。

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

2 Maven项目基础

2.1 项目坐标

Maven中的坐标是资源的唯一标识,通过三个向量唯一定位资源位置。

  1. groupId:定义当前Maven项目隶属组织的名称,通常是域名反写(例如net.csdn)

  2. artifactId:定义当前Maven项目的名称,通常是模块名称(例如 order-service、auth)

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

2.2 项目结构

复制代码
maven-project
|--- src        源代码目录和测试代码目录
    |--- main        源代码目录
        |--- java          源代码java文件目录
        |--- resources     源代码配置文件目录
    |--- test        测试代码目录
        |--- java          测试代码java目录
        |--- resources     测试代码配置文件目录
|--- target     编译、打包生成文件存放目录
|--- pom.xml    项目配置文件

2.3 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">
    <!-- POM模型版本 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 当前项目坐标 -->
    <groupId>org.example</groupId>
    <artifactId>maven-project01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 指定项目代码版本、编码等属性 -->
    <properties>
        <maven.compiler.source>20</maven.compiler.source>
        <maven.compiler.target>20</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 项目打包方式,默认为jar -->
    <packaging>jar</packaging>

    <!-- 项目依赖 -->
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.6</version>
        </dependency>
    </dependencies>

</project>

3 Maven依赖管理

3.1 依赖配置

依赖:指当前项目运行所需要的jar包。

一个项目中可以引入多个依赖,通过指定依赖的坐标值引入依赖。

xml 复制代码
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.6</version>
        </dependency>

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

3.2 依赖范围

可以通过使用scope标签指定依赖的作用范围。

scope值 主程序 测试程序 打包(运行) 范例
compile(默认) Y Y Y log4j
provided Y Y - servlet-api
runtime - Y Y jdbc驱动
test - Y - junit

3.3 依赖传递和排除

maven的依赖具有传递性,对于某个配置建立的依赖(直接依赖)它会自动把所依赖的其他jar包也一起导入(间接依赖)。

配置依赖的排除其实就是阻止某些 jar 包的传递,因为这样的 jar 包传递过来可能会和其他 jar 包冲突,一般通过使用exclusion标签配置依赖的排除

xml 复制代码
<dependency>
    <groupId>org.example</groupId>
    <artifactId>maven-project01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 排除依赖,无需指定版本号 -->
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4 Maven生命周期

Maven的生命周期就是为了对所有的构建过程进行抽象和统一,分为相互独立的clean(清理工作)、default(核心工作)、site(生成报告、发布站点等)共三套。

Maven的生命周期是抽象的,本身不做任何实际工作,实际任务都交由插件来完成。在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。常用的生命周期阶段包括

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

  2. compile:编译项目源代码。

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

  4. package:将编译后的文件打包。

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

5 参考资料

黑马程序员JavaWeb开发教程-bilibili

超级详细的 Maven 教程(基础+高级)_maven教程-CSDN博客

相关推荐
十碗饭吃不饱3 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
T_Wizard3 小时前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI3 小时前
JEV的用法
java·前端·数据库
灿飞3 小时前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin
知识搬运临时工3 小时前
JVM 删掉偏向锁之后,一次无竞争锁从 0.3 纳秒变成 5.4 纳秒
java
IT枫斗者枫哥3 小时前
用了BigDecimal还差一分?用四组Java代码查清原因
java·后端
一条泥憨鱼4 小时前
【消息队列】ACK确认了什么:消息队列可靠投递的完整链路
java·后端·kafka·消息队列·rabbitmq
从琳开始9895 小时前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php
文丑颜不良啊5 小时前
LeetCode1861~1880题目解析
java·leetcode
Flynn Liang5 小时前
AgentScope Java 深度解析:ReActAgent、HarnessAgent 与多智能体编排——JVM 上的自治 Agent 底座
java·大模型·架构设计·ai agent·spring ai·langchain4j·agentscope