Maven 解析:打造高效、可靠的软件工程

Apache Maven【简称maven】 是一个用于 Java 项目的构建自动化工具,

通过提供一组规则来管理项目的构建、依赖关系和文档。

1.Pre-预备知识:

1.1.Maven是什么?

by [Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客](https://blog.csdn.net/King_wq_2020/article/details/117818277 "Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客")

是**Java 领域中最流行的自动化构建工具之一,**Maven 作为 Java 项目管理工具,具有:

  • 包管理;
  • 许多插件--支持整个项目的开发、打包、测试及部署等;

1.2.传统项目 vs maven项目:

1.2.1传统工程:

  • jar包放置在项目中 ;
  • 当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本怎么办,重新下载,重新指定,这个过程操作麻烦。;

1.2.2用了Maven :

  • Maven工程真正jar包放置在仓库中,项目中只用jar包坐标【like 指针】;
  • 直接在pom.xml 中添加 xml代码(所依赖jar包的坐标)即可添加指定包名、版本
1.2.2.1 pom.xml-- Maven的重要配置文件

(1)**POM:**Project Object Model [项目对象模型];

(2)pom.xml 对于Maven工程是核心配置文件,构建过程的一切设置都在这个文件中进行配置;

技术上讲,任何包含 pom.xml 文件的目录也是有效的 Maven 项目。pom.xml 文件包含描述 Java 项目所需的一切。

1.2.2.2 Maven的坐标

使用三个向量[groupId+artifactId+version] 在仓库中唯一定位一个Maven工程(jar包)

e.g.:

1\] **groupid:**公司或组织域名倒序+项目名 > \com.atguigu.maven\ \[2\]**artifactid**:模块名 > \Hello\ \[3\] **version**:版本 > \1.0.0\ ### 1.3.Maven的常用命令 注意:使用Maven命令,必须在pom.xml所在目录。【如 编译、测试、打包......】 > \[1\] mvn clean:清理(删除原来编译,测试的 target目录,不会删除已经 install到仓库里的包) > \[2\] mvn compile:编译主程序(当前目录下生成 target,存放编译主程序后生成的字节码) > \[3\] mvn test-compile:编译测试程序(当前目录生成 target,存放编译测试程序之后生成的字节码) > \[4\] mvn test:\[test前要先compile\]执行测试(会生成一个目录 surefire- reports,保存测试结果) > \[5\] mvn package:打包主程序(会编译、编译测试、测试、并且按照pom.xml配置把主程序打包生成jar包或者war包 > \[6\] mvn install:安装主程序(实际有compile-test-package-install)会把**本工程打包**,并且按照本工程的坐标保存到本地仓库中) > \[7\] mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中) > \[8\]组合指令 :比如mvn clean install = mvn clean + mvn install ; > \[9\]还可以加入参数: -fae "fail at end" > > e.g.: ```bash mvn clean install -Dmaven.test.skip=true ``` ### 1.4Maven 的核心概念 ##### 1. **项目对象模型(POM)** * pom.xml 描述项目的所有相关信息,包括依赖关系、构建目标、插件配置等。 ##### 2. **生命周期(Lifecycle)** * Maven 定义了一系列的构建阶段,称为生命周期。生命周期由一系列的阶段组成,每个阶段代表一个构建过程中的某个特定任务。常见的生命周期包括: * **清理项目** :`mvn clean` * **编译项目** :`mvn compile` * **运行测试** :`mvn test` * **打包项目** :`mvn package` * **安装到本地仓库** :`mvn install` * **部署到远程仓库** :`mvn deploy` ##### 3. **目标(Goal)** * 目标是生命周期中的具体任务,例如 `compile`、`test`、`package` 等。每个目标对应一个或多个 Maven 插件的执行。 ##### 4. **插件(Plugin)** * Maven 插件提供了执行特定任务的功能,如编译源代码、运行单元测试、打包项目等。插件通过在 POM 文件中配置来启用,并指定其执行的目标。 ##### 5. **依赖管理(Dependency Management)** * Maven 通过依赖管理机制来解决项目间的依赖关系。依赖可以是 Maven 项目的坐标(Group ID、Artifact ID 和 Version),Maven 会自动下载这些依赖项,并在构建过程中使用它们。 * 依赖管理还包括依赖范围(scope),如 compile、test、provided、runtime 等,这些范围决定了依赖项在不同构建阶段的行为。 ##### 6. **仓库(Repository)** * Maven 使用本地仓库【\~/.m2/repository】来缓存下载的依赖项和其他构件。 ##### 7. **继承(Inheritance)** * Maven 支持项目的继承机制,子项目可以从父项目继承配置信息,如依赖、插件配置等,这有助于减少重复配置,并保持项目的一致性。

相关推荐
ゞ 正在缓冲99%…2 分钟前
leetcode22.括号生成
java·算法·leetcode·回溯
写代码的小王吧5 分钟前
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
java·开发语言·网络·安全·web安全·网络安全·jar
伊成19 分钟前
Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统
java·maven·mybatis·springboot·学生成绩管理系统
一人の梅雨32 分钟前
化工网平台API接口开发实战:从接入到数据解析‌
java·开发语言·数据库
扫地的小何尚37 分钟前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu
汤姆大聪明1 小时前
Redisson 操作 Redis Stream 消息队列详解及实战案例
redis·spring·缓存·maven
Niuguangshuo1 小时前
Python设计模式:克隆模式
java·开发语言·python
suimeng61 小时前
基本元素定位(findElement方法)
java·selenium
方渐鸿1 小时前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮1 小时前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试