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 笔记部分内容和图片来自黑马程序员

相关推荐
Suwg2094 分钟前
【由浅入深认识Maven】第4部分 maven在持续集成中的应用
servlet·ci/cd·maven
组合缺一1 小时前
Solon Cloud Gateway 开发:Helloword
java·gateway·solon
奕辰杰4 小时前
关于使用微服务的注意要点总结
java·微服务·架构
m0_748230215 小时前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea
六毛的毛5 小时前
java后端之登录认证
java·开发语言·python
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
中國移动丶移不动7 小时前
Java 反射与动态代理:实践中的应用与陷阱
java·spring boot·后端·spring·mybatis·hibernate
DEARM LINER8 小时前
RabbitMQ 死信队列
java·rabbitmq·java-rabbitmq
组合缺一8 小时前
drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程
java·solon·flow·drools
曲奇是块小饼干_8 小时前
leetcode刷题记录(九十)——74. 搜索二维矩阵
java·数据结构·算法·leetcode·职场和发展·矩阵