SSM 框架学习: Maven 项目构建和依赖管理工具 Published on Dec 11, 2023 in 日常 with 0 comment Java ### 一. Maven 简介和快速入门 ####1.1 Maven 介绍 Maven是一款为Java项目构建管理、依赖管理的工具,使用它可以完成自动化构建、测试、打包和发布项目,大大提高开发效率和质量。 例如:需要第三方依赖,比如 Mysql 的驱动,我们可以直接将需要的依赖项编写到 Maven 工程的配置文件,其会自动下载并复制这些依赖到项目中,也会自动下载所需的依赖,同时确保依赖版本正确、无冲突和完整。 同时,Mevan 可以完成构建管理,即将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序和库的过程。 ####1.2 安装 Maven [Maven 官网](https://maven.apache.org/ "Maven 官网") (1)可以从 Maven 官网下载安装文件,其中在安装前本机需要先行安装 Java 环境。解压到本地后,还需要配置一下环境变量,如下图所示:  然后在 Path 中添加 `%MAVEN_HOME%\bin` (2)安装完成后,可以从 CMD 命令行查看到当前的 Maven 和 Java 信息。  (3)一般情况下,其有三种类型,分别是:本地仓库、中央仓库和远程仓库。 - 运行 Maven 的时候,其所需的任何构建都是直接从本地获取的,如果本地仓库没有,它会尝试从远程仓库下载至本地,再使用本地仓库的构件。 - 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库,不过因为服务在海外,所以访问会很慢。 - 远程仓库,这是开发人员自己定制的仓库,包含了所需要的代码库或其他工程中用到的文件。 我们需要修改 Maven/conf/settings.xml 配置文件。首先在 55 行配置本地仓库的地址: ```xml D:\repository ``` 然后配置国内阿里的镜像,在 160 行左右: ```xml aliyunmaven * 阿里云公共仓库 https://maven.aliyun.com/repository/public ``` 最后配置 JDK 1.8 版本的项目构建,在 255 行附近: ```xml jdk-1.8 true 1.8 1.8 1.8 1.8 ``` 完成上述配置后,就可以在 IDEA 添加这个已经配置完成的 Maven 软件。 ### 二. 基于 Maven 的工程创建 #### 2.1 Maven 工程的 GAVP 属性 (1)GroupID 格式:com.{公司/BU}.业务线.[子业务线],最多 4 级。 (2)ArtifactID 格式:产品线名-模块名。 (3)Version 版本号,建议格式为 主版本号.次版本号.修订号。 (4)Packaging 定义规则,指示将项目打包为什么类型的文件,IDEA 根据此值识别 Maven 项目的类型。 - 其默认属性为 jar ,代表普通的 Java 共亨,打包后为 .jar 结尾的文件。 - 当属性为 war 时,代表 Web 工程,打包后以 .war 结尾。 - 当属性为 pom 时,代表不会打包。 #### 2.2 利用 Maven 创建 SE 工程  其中,packaging 是缺省的,默认为 jar。 #### 2.3 IDEA 构建 Maven JavaEE 工程 这里的创建有两种方式,分别是手动创建和自动创建。 (1)手动创建,就是在刚才已经建立的 JavaSE maven 工程中,手动添加 Web 项目结构文件。然后修改 pom.xml 的文件打包方式为 war 。  (2) 自动创建,需要先安装一个 JBLJavaToWeb 插件。在 IDEA 的 settings/plugins/marketplace 中下载。安装完成后,右键普通工程,就可以看到 JBLJavaToWeb 选项,点击后将自动变成 Web 工程。  ### 三. Maven 核心功能之依赖管理和构建管理 #### 3.1 依赖管理和配置 Maven 依赖管理是其最重要的功能之一,它能够帮助开发人员自动解决软件包依赖问题。通过定义 POM 文件, Maven 能够自动解析项目的依赖关系,并通过仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。 (1)如何知道第三方的依赖信息?可以从 Maven 提供的官网查询: [Maven 查询官网](https://mvnrepository.com "Maven 查询官网") (2)可以通过插件 maven-search 获得。 示例 POM.xml 如下所示: ```xml 4.0.0 org.alen maven-javese-project-01 1.0-SNAPSHOT war 2.15.2 com.fasterxml.jackson.core jackson-core ${jacksion.version} ``` #### 3.2 依赖传递和冲突 (1)依赖传递:指的是当一个模块或库 A 依赖另一个模块或库 B,而 B 又依赖于模块或库 C,那么 A 会间接依赖于 C。这种依赖的传递结构会形成一个依赖树,当我们引入一个库或者框架时,构建工具会自动解析和加载其所有的直接和间接依赖,确保这些依赖都可用。 (2)依赖冲突:发现已经存在依赖会终止传递依赖,避免循环依赖和重复依赖的问题。 #### 3.3 扩展构建管理和插件配置 (1)构建的概念:项目构建指的是将源代码、依赖库和资源文件等转换成可执行文件或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。  (2)主动触发的场景: - 重新编译:编译不充分,部分文件没有被编译。 - 打包,独立部署到外部服务器,打包部署。 - 部署本地或私服仓库。 (3)命令方式构建: 语法:mvn 构建命令 构建命令...[多个命令空格隔开]。  (4)可视化方式构建: 如果是使用 IDEA 的话,可以进行可视化操作,如下图所示:  (5) 构建命令周期:这可以理解成是一组固定构建命令的有序集合,触发周期后的命令会自动触发周期前的命令,这是一种简化构建的思路。 ``` 打包: mvn clean package 重新编译:mvn clean compile 本地部署:mvn clean install ``` ### 四. 继承和聚合特性 #### 4.1 Maven 工程继承关系 Maven 继承是指在项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以在多个项目中共享同一个配信息,简化项目的管理和维护。 ```xml org.alen maven-pom-parent 1.0-SNAPSHOT ``` (1)在父工程中声明版本信息: ```xml mysql mysql-connector-java 8.0.28 ``` (2) 在子模块中继承: ```xml mysql mysql-connector-java ``` #### 4.2 Maven 工程聚合关系 (1)概念:Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按照顺序触发子工程构建的过程。 (2)示例: ```xml maven-sub-project ``` 本文由 Alen 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间为: Aug 20, 2024 at 02:11 pm