Maven

Maven

Maven

Maven 是 Apache 基金会推出的项目管理与构建自动化工具,核心作用是解决 Java 项目中依赖管理混乱、构建流程不统一的问题,让开发更聚焦业务逻辑而非环境配置。

maven 提出了一种叫做 maven 仓库的概念,使得我们可以将第三方和我们需要引用的项目都放置在maven仓库当中。如果其他人或项目组也需要使用就可以直接通过maven进行配置就行,maven通过使用配置文件的方式使得项目在管理和交接的过程中成本变得非常低。

Maven的四大特征

一致项目结构

Maven 项目目录结构遵循约定优于配置(Convention Over Configuration) 原则,标准化的结构能减少配置成本,确保项目一致性,maven 的目录结构在所有的编译器下边都是能够运行的,Maven 项目目录结构如下:

顶层目录:src/ 是源代码与资源的根目录,pom.xml 是 Maven 的核心配置文件,包括定义项目坐标(groupId、artifactId、version)、声明项目依赖(dependencies 标签)、配置构建插件(如编译插件、打包插件,build/plugins 标签)。

src 目录是项目源码和资源的存放位置,内部按主程序和测试程序严格分离,避免混淆。

src/main 是主程序目录,src/main/java/ 是主程序 Java 源代码,包结构在此目录下;src/main/resources/ 是主程序资源文件,运行后自动加载到类路径;src/main/webapp/ 是可选项仅 Web 项目需要,src/main/webapp/WEB-INF/ 是 Web 项目核心配置目录。

src/test 是测试程序目录,存放单元测试、集成测试的代码和资源,结构与 src/main 对称,确保测试代码独立管理。

target 是构建输出目录,是由 Maven 编译、打包后自动生成的目录,此目录无需手动修改,可删除进行清理构建产物,包含以下内容:

classes/:src/main/java 编译后的 .class 文件 + src/main/resources 的资源文件(类路径根目录);test-classes/:src/test/java 编译后的测试 .class 文件 + 测试资源;.jar 和 .war:最终打包产物,如 Jar 包、War 包,取决于项目类型。

依赖管理系统

Maven 的依赖管理系统是其核心功能之一,它通过标准化的方式管理项目所需的第三方库(JAR 包),解决了传统项目中手动复制 JAR 包带来的版本冲突、依赖冗余等问题。其核心思想是声明式依赖,开发者只需在配置中声明需要的依赖,Maven 会自动完成下载、存储、关联等工作。用gropId、artifactId、version 组成 Coordination(坐标) 唯一标识一个依赖,任何基于maven构建的项目自身也必须定义这三个属性。

xml 复制代码
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>

一致的插件机制

这一个项目当中我们往往会引入很多插件,如tomcat服务器等,为了实现项目组内插件的统一,maven提供了一套机制来保证这些机制的施行。插件与项目依赖一样,通过 Maven 坐标唯一标识,遵循统一的版本管理和仓库机制,插件必须在 pom.xml 的 <plugins><pluginManagement> 中声明坐标,直接在 <plugins> 中声明是最常见的方式,声明的插件会直接应用于当前项目的构建过程,而 <pluginManagement> 用于统一管理多模块项目的插件版本和配置,通常在父 POM 中使用,方便子项目继承,声明在此处的插件不会自动生效,子项目需要显式引用才能使用。

部署 tomcat 插件示例:

xml 复制代码
    <build>
        <finalName>SpringMVC</finalName>
        <pluginManagement>
            <plugins>
                <!-- Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <!-- 实际启用插件 -->
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!--配置端口号-->
                    <port>80</port>
                    <!--配置项目路径-->
                    <path>/mavenWeb</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

部署 tomcat 插件成功后的形式:

多模块构建

Maven 多模块构建是将一个大型项目拆分为多个相互依赖的子模块(Module),通过统一的父 POM(Project Object Model)管理依赖、插件和构建配置,实现模块化开发与维护的机制,子模块专注于具体功能实现。

举例创建SSM项目需要实现的业务逻辑:用户的请求先到 SpringMVC,SpringMVC 是用于处理与当前用户的交互,数据再交给 Spring,再交给 Mybatis,数据库查询或操作之后,再将数据返回 Spring,再交给SpringMVC,最后返回给当前用户。

在父类的 pom.xml 中做如下设置:

其中 <modules> 是模块管理部分,这部分定义了当前父项目包含的子模块,每个 <module> 对应一个子项目的目录名称,Maven 会根据这些配置自动构建所有子模块,实现批量管理。

子项目内的业务逻辑代码:



该项目的启动顺序:

父类 SSM ----->install

子类 Mybatis ------------>install

子类SpringMVC ------->install

子类 Spring ------>install

再启动 tomcat

启动成功效果:

最后访问 http://localhost:80/wavenWeb/333

Maven仓库

Maven 仓库是存储 Java 项目依赖的中心仓库,用于统一管理依赖,避免开发者手动下载和管理第三方库,是 Maven 自动化构建的核心组件之一。

核心作用包括以下内容:

  • 统一存储依赖:集中存放项目所需的第三方库和自定义模块,避免重复存储;
  • 自动拉取依赖:Maven 会根据项目 pom.xml 配置,自动从仓库下载所需依赖及其依赖;
  • 版本管理:同一依赖的不同版本可共存于仓库,Maven 按 pom.xml 指定的版本精准引用,避免版本冲突。

仓库的分类

Maven 仓库主要分为本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在则直接使用,如果本地没有Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用,如果本地仓库和远程仓库都没有,Maven就会报错。

远程仓库分为三种: 中央仓库,私服,其他公共库

  • 中央仓库(Central Repository)是 Maven 官方维护的公共仓库,包含绝大多数开源 Java 依赖,无需额外配置,Maven 默认会从中央仓库拉取依赖,服务器在国外,下载速度可能较慢,国内常用镜像仓库(如阿里云、华为云)加速。
  • 私有仓库(Private Repository)是另一种特殊的远程仓库,企业 / 团队内部搭建的私有仓库,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库,存储团队内部开发的共享模块(不对外公开)、中央仓库没有的第三方商业依赖、缓存中央仓库依赖,提升团队内部下载速度。
  • 公共第三方仓库是部分开源项目 / 组织提供的专属远程仓库,用于发布中央仓库未收录的依赖。

一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录,当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。若对于仓库路径的修改,可以通过 maven 配置文件 conf 目录下 settings.xml 中的 <localRepository> 标签指定自定义路径

Maven打包操作

Maven 的打包操作(mvn package)是将项目源代码、资源文件等经过编译、处理后,生成可分发、可运行的标准化产物的过程,它是 Maven 构建生命周期中的关键阶段,目的是将开发完成的项目转换为可部署或运行的格式。

打包操作需要先清空缓存,其次进行编译,然后再进行打包

打包结果如下:

相关推荐
AAA修煤气灶刘哥1 分钟前
面试必问:聊一聊Spring中bean的循环依赖问题 ?——从原理到避坑
java·后端·程序员
星火飞码iFlyCode31 分钟前
真实案例 | 如何用iFlyCode开发Webpack插件?
java·python·编辑器
JavaArchJourney1 小时前
HashMap 源码分析
java
hrrrrb1 小时前
【Java Web 快速入门】十、AOP
java·前端·spring boot
凛冬君主1 小时前
插入排序专栏
java·算法·排序算法
optimistic_chen2 小时前
【Java EE进阶 --- SpringBoot】初识Spring(创建SpringBoot项目)
spring boot·后端·spring·java-ee·tomcat·mvc·idea
檀越剑指大厂2 小时前
【开发语言】Groovy语言:Java生态中的动态力量
java·开发语言
Tina学编程2 小时前
线程P5 | 单例模式[线程安全版]~懒汉 + 饿汉
java·单例模式·线程安全
我们从未走散2 小时前
设计模式学习笔记-----单例模式
java·笔记·学习·单例模式·设计模式