魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Package - Maven

文章摘要: Java项目管理和构建工具。

相关信息

外部相关文章

  • Maven官方依赖查询网站:Maven Repository
  • 参考教程:黑马程序员B站视频

内部相关文章

  • Java 8 编程语言:Language-Java-JavaSE-查询手册-JavaSE8
  • Java 17 编程语言:Language-Java-JavaSE-查询手册-JavaSE21
  • Maven第三方类库热门推荐:Package-Maven-热门推荐-第三方类库
  • 模块化拆分原则和规范:Package-Maven-热门推荐-模块化拆分原则和规范

注释

  • 由于依赖有传递性,因此在项目中需要尽可能不出现重复的依赖,或者说通过依赖传递的方式来少写一个依赖。
  • Maven的不足之处:下载jar包的中途发生下载不全时需要手动删除,若不手动删除本地仓库中的jar包,会造成无法向“远程仓库”获取jar包。
  • 提示:java/文件夹和resources/文件夹,在编译后会变成同一个文件夹。

简介

简要说明

Maven 是一个Java项目管理和构建工具。

  • 提供一套标准化的项目结构。
  • 使用统一的方式进行自动化构建。
  • 管理项目依赖的jar包。
  • Maven 的命令名称叫mvn。

主要功能

  • 依赖管理:自动处理项目依赖,通过简单的配置即可下载和管理所需的库。
  • 构建管理:通过定义生命周期和插件,可以自动化项目的编译、测试、打包、部署等过程。
  • 项目信息管理:通过POM文件,可以管理项目的版本、开发者、许可证等信息。
  • 项目文档生成:可以生成项目文档,如API文档等。
  • 项目报告:提供多种内置报告,如测试覆盖率、代码质量等。
  • 插件系统:Maven拥有丰富的插件,可以扩展其功能,用于执行各种任务。

注意事项

  • POM配置:正确配置POM文件对于Maven的使用至关重要,错误的配置可能导致构建失败。
  • 依赖冲突:需要注意依赖的版本和范围,避免版本冲突。
  • 插件版本:插件版本的选择也很重要,不同的版本可能会有不同的行为。
  • 构建性能:Maven构建可能会消耗较多时间,特别是大型项目,需要优化构建配置。
  • 网络问题:由于依赖管理需要从中央仓库下载资源,网络问题可能会影响构建过程。

适用场景

  • Java项目构建:适用于各种Java项目的构建和管理,特别是大型和多模块项目。
  • 多模块项目:Maven的模块化支持使得它非常适合管理具有多个模块的项目。
  • 标准化构建:在团队协作中,Maven可以提供标准化的构建流程,确保项目的一致性。
  • 依赖管理:当项目依赖众多第三方库时,Maven的依赖管理功能尤为有用。
  • 持续集成:在持续集成(CI)环境中,Maven可以自动化构建和测试过程。
  • 企业级应用:在企业级应用开发中,Maven的插件和扩展能力可以帮助管理和构建复杂的软件系统。

安装与卸载

详细总结:Package-Maven-安装与卸载

终端命令

详细总结:Package-Maven-终端命令-mvn

配置文件

详细总结:Package-Maven-配置文件

项目“pom.xml”配置文件总结:Package-Maven-“pom.xml”文件

热门推荐

详细总结:

问题总结

详细总结:Package-Maven-问题总结

仓库

  • 用于存储资源,包含各种jar包。

仓库分类

  • 本地仓库:自己电脑上存放资源的仓库,连接远程仓库获取资源。
  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源。
  • 中央仓库:Maven团队维护,存储所有资源的仓库。
  • 私服仓库:部门/公司范围内存储资源的仓库,从中央仓库获取资源。

本地仓库默认存储位置

  • Debian Linux 系统默认下载到本地仓库的保存位置在:/home/<用户名>/.m2/repository/
  • Windows 系统默认下载到本地仓库的保存位置在:C:\<用户名>\.m2\repository\

坐标

  • 用于描述仓库中资源的位置,使用唯一标识,唯一性定位资源位置。
  • 通过标识可以将资源的识别与下载工作交由机器完成。

Maven坐标的主要组成部分

  • 组织ID:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.baidu)。
  • 项目ID:定义当前Maven项目名称(通常是模块名称,例如:AI)。
  • 版本号:定义当前项目版本号。

约定

  • 约定大于配置,有约定(默认值)需要了解一下。

详细总结:Package-Maven-约定

pom.xml文件

  • pom.xml文件是 Maven 项目的核心配置文件,全称为 Project Object Model (项目对象模型)。
  • 它定义了项目的构建、依赖、插件和其他项目信息的配置。
  • pom.xml文件位于 Maven 项目的根目录下,Maven 构建工具通过解析这个文件来执行项目的构建和依赖管理。

详细总结:pom.xml配置文件

依赖管理

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
  • 声明优先:当资源的相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

可选依赖

  • 对外隐藏当前所依赖的资源,即改为透明不可见。

案例

<!-- 暂无 -->

排除依赖

  • 主动断开依赖的资源,被排除的资源无需指定版本,即不需要。

案例

<!-- 项目依赖 -->
<dependencies>
	<!-- Deeplearning4j 深度学习框架 -->
	<dependency>
	    <groupId>org.deeplearning4j</groupId>
	    <artifactId>deeplearning4j-core</artifactId>
	    <version>1.0.0-beta6</version>
		<!-- 排除依赖 -->
		<exclusions>
			<!-- 排除具体依赖 -->
			<exclusion>
		        <artifactId>logging-parent</artifactId>
		        <groupId>org.apache.logging</groupId>
		    </exclusion>
		</exclusions>
		
	</dependency>
    
</dependencies>

依赖范围

  • 依赖的jar默认情况可以在任何地方使用。
  • 可以通过<scope> </scope>标签设定其作用范围。

作用范围

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)
范围编译测试打包例子
compileYYY日志
testY测试代码
providedYY依赖的jar包
runtimeYjdbc

案例

<!-- 项目依赖 -->
<dependencies>
	<dependency> <!-- Deeplearning4j 深度学习框架 -->
	    <groupId>org.deeplearning4j</groupId>
	    <artifactId>deeplearning4j-core</artifactId>
	    <version>1.0.0-beta6</version>
	    <!-- 设置依赖范围 -->
	    <scope>compile</scope>
	</dependency>
    
</dependencies>

依赖传递

  • 默认情况下,所有依赖都是可传递的,这意味着如果你依赖了一个库,那么这个库所依赖的其他库也会被包含在你的项目中。
  • <optional>true</optional>:为true时不会传递给子模块。

案例

<!-- 项目依赖 -->
<dependencies>
	<dependency> <!-- Deeplearning4j 深度学习框架 -->
		<groupId>org.deeplearning4j</groupId>
	    <artifactId>deeplearning4j-core</artifactId>
	    <version>1.0.0-beta6</version>
	    <!-- 是否不允许传递给子模块 -->
	    <optional>true</optional>
	</dependency>
    
</dependencies>

项目构建生命周期

  • 通过定义项目生命周期和构建过程的各个阶段来管理项目的构建、测试和部署。
  • Maven 的项目生命周期主要分为三个内置的生命周期:default(默认)、clean 和 site。每个生命周期都由一系列的阶段(Phase)组成,这些阶段是有序的,且后面的阶段依赖于前面的阶段。
步骤英文中文功能
01validate校验校验项目是否正确并且所有必要的信息可以完成项目的构建过程
02initialize初始化初始化构建状态,比如设置属性值
03generate-sources生成源代码生成包含在编译阶段中的任何源代码
04process-sources处理源代码处理源代码,比如过滤任意值
05generate-resources生成资源文件生成将会包含在项目包中的资源文件
06process-resources处理资源文件复制和处理资源到目标目录,为打包阶段做好准备
07compile编译编译项目的源代码
08process-classes处理类文件处理编译生成的文件,比如对class文件的字节码改善优化
09generate-test-sources生成测试源代码生成包含在编译阶段中的任何测试源代码
10process-test-sources处理测试源代码处理测试源代码,比如过滤任意值
11generate-test-resources生成测试资源文件为测试创建资源文件
12process-test-resources处理测试资源文件复制和处理测试资源到目标目录
13test-compile编译测试源码编译测试源代码到测试目标目录
14process-test-classes处理测试类文件处理测试源代码编译生成的文件
15test测试使用适合的单元测试框架运行测试
16prepare-package准备打包在实际打包之前,执行任何的必要的操作为打包做准备
17package打包将编译好的代码打包成可分发格式的文件,比如jar文件等
18pre-integration-test集成测试前在执行集成测试前进行必要的动作,比如搭建需要的环境
19integration-test集成测试处理和部署项目到可以运行集成测试环境中
20post-integration-test集成测试后在执行集成测试完成后进行必要的动作,比如清理集成测试环境
21verify验证运行任意的检查来验证项目包有效且达到质量标准
22install安装安装项目到本地仓库,这样项目包可以作为其他本地项目的依赖
23deploy部署将最终的项目包复制到远程仓库中与其他开发者和项目共享

修改Maven软件配置

配置文件位置

  • Maven配置文件位置:Maven安装位置/conf/settings.xml

修改本地仓库存储位置

  • 在配置文件中添加<localRepository> </localRepository>标签。
  • 在标签对中写仓库的存储位置。
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>(仓库路径)</localRepository>

修改镜像源

  • 修改 maven 的默认软件仓库为“华为镜像源”仓库。
  • 华为官方文档:网址连接
  • 修改用户配置的Maven镜像源/home/<用户名>/.m2/目录下的settings.xml文件。(若没有该文件则手动创建该文件)
  • 修改全局配置的Maven镜像源/etc/maven/目录下的settings.xml文件。

修改内容如下:

<settings>
	<mirrors>
		<!--配置具体的仓库的下载镜像-->
		<mirror>
			<!--镜像的唯一标识符,用来区分不同的mirror元素-->
			<id>huaweicloud</id>
			<!--对哪种仓库进行镜像,即替代哪个仓库-->
			<mirrorOf>central</mirrorOf>
			<!--镜像名称-->
			<name>华为云镜像源</name>
			<!--镜像URL-->
			<url>https://mirrors.huaweicloud.com/repository/maven/</url>
		</mirror>
	</mirrors>

</settings>
更新时间: 2025/10/3 17:56