Maven 项目管理

对于使用Mave进行项目构建的学习 是学习SpringBoot时的补充学习内容 主要是关于一些理论的补充 实际使用还是会继续学习使用SpringBoot

1 简介

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

作用:1.项目构建:提供标准的,跨平台的的自动化项目构建方式

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

3.统一开发结构:提供统一 标准的项目开发结构


2 基本概念

2.1 仓库

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

配置:可以修改本地仓库的位置

2.2 坐标

坐标:用于描述资源在仓库中的位置 唯一定位资源的位置

查询坐标的网站:Maven Repository: Search/Browse/Explore

坐标组成:

XML 复制代码
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

3 项目构建

3.1 手工构建

使用手工创建文件夹或者使用插件进行模板生成

目录结构:

与src同层有放置xml配置文件

构建命令:

使用MVN开头 后面加功能参数 可以一次执行多行命令 使用空格分割

3.2 IDEA创建

idea 可以自动创建Maven控制项目 或者空项目自行配置

常规文件包会使用不同颜色区分

可以自己配置运行命令和调试


4 依赖管理

4.1 依赖配置

当前项目运行所需要的资源 配置格式

XML 复制代码
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<! -- 设置具体的依赖项 -->
    <groupId>junit</groupId>
<!-- 依赖所属群组ID-->
    <artifactId>junit</artifactId>
<!-- 依赖项目ID-->
    <version>4.12</version>
<!-- 依赖版本号-->
    <scope>test</scope>
</dependency>

4.2 依赖传递

当同级配置相同的资源的时 后配置的会覆盖先配置的

4.3 可选依赖

4.4 排除依赖

4.5 依赖范围


5 生命周期和插件

生命周期:

5.1 clean生命周期

5.2 defult生命周期

5.3 site生命周期

插件:


6 分模块开发与设计*

一个工程拆分为诸多个模块 各个模块合作完成项目

6.1 模块拆分

每个功能都独立成一个模块 放置相关的代码和配置文件 模块之间通过接口进行通信

dao模块拆分 (模块之间存在依赖关系)

service模块拆分

controller模块拆分

6.2 模块聚合

多模块构建维护 由一个模块控制所有模块的下载与更新

模块的最终执行顺序与模块间的依赖关系有关 与配置顺序无关

XML 复制代码
<!-- 定义该工程用于构建管理 -->
<packaging>pom</packaging>
<!-- 管理工程列表 -->
    <modules>
<!--  具体工程名称 -->
        <module>../dao</module>
        <module>../service</module>
        <module>../controller</module>
    </modules>


<!-- 进行依赖管理  -->
 <distributionManagement>
        <snapshotRepository>
        </snapshotRepository>
    </distributionManagement>

6.3 模块继承

XML 复制代码
<!-- 定义工程的父工程 --> 
<parent>
        <groupId> </groupId>
        <artifactId> </artifactId>
        <version> </version>
        <relativePath/> <!-- 相对路径 -->
    </parent>

6.4 版本管理

属性:

|------------|-----------------------------------|----------------------------|
| 属性类别 | 介绍 | 调用格式 |
| 内置属性 | maven内置属性 快速配置 | {version} | | Settings属性 | maven配置文件setting.xml中的标签属性 用于动态配置 | {setting.localRepository} |
| java系统属性 | java的系统属性 | {user.name} | | 环境变量属性 | maven配置文件setting.xml中的标签属性 用于动态配置 | {env.JAVA.HOME} |

XML 复制代码
 <!-- 定义自定义属性 -->
    <properties>
        <spring.version>5.19</spring.version>
    </properties>
    
    <!--  使用 ${} 进行属性值的调用 -->

工程版本:

版本号约定:

6.5 资源配置

配置一些资源时 可以先定义自定义属性 然后在属性文件中使用 ${} 解析 达到在一个文件配置信息

例如:<jdbc.url> jdbc:mysql://127.0.0.1:db</jdbc.url>

XML 复制代码
 <!-- 配置资源文件的对应信息 -->
    <resources>
        <resource>
            <directory>${project.basedir}}/src/main/resources</directory> <!-- 项目基础路径 通配符-->
            <includes>
                <include>**/*.xml</include>
                <filtering></filtering>
            </includes>
        </resource>
    </resources>

6.6 多环境配置

区分配置开发和生产环境 使用不同的属性

XML 复制代码
   <!-- 配置多环境 -->
    <profiles>
        <!-- 定义具体的环境:生产环境 -->
        <profile>
            <!-- 定义环境对用的唯一ID  -->
            <id>dev</id>
            <!-- 定义环境中专用的属性值 -->
            <properties>
                <!-- 配置数据源 -->
                <spring.datasource.url>jdbc:mysql://localhost:3306/test</spring.datasource.url>
            </properties>
            <activation>
                <!-- 配置默认环境条件 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!-- 定义具体的环境:开发环境 -->
        <profile>
            <id>prod</id>
        </profile>
    </profiles>

学习时间 2024.01.18 笔记部分内容和图片来自黑马程序员

相关推荐
神明不懂浪漫12 分钟前
【第五章】Java中的继承与多态
java·开发语言
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit2 小时前
Java+Ai+vue
java·spring·maven
qq_2518364572 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive3 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿3 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧3 小时前
Eclipse 批量文本替换
java·ide·eclipse
程序员清风3 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
一只枫林3 小时前
MySQL内、外连接知识点汇总
java·前端·数据库
梅头脑3 小时前
写了3年CRUD,volatile和synchronized的区别还是答不清——直到我画出了这张三性两锁边界图
java