当前位置: 首页 > news >正文

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

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

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

1.Pre-预备知识:

1.1.Maven是什么?

[by 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:公司或组织域名倒序+项目名

<groupid>com.atguigu.maven</groupid>

[2] artifactid:模块名

<artifactid>Hello</artifactid>

[3] version:版本

<version>1.0.0</version>

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.:

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)
  • 目标是生命周期中的具体任务,例如 compiletestpackage 等。每个目标对应一个或多个 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 支持项目的继承机制,子项目可以从父项目继承配置信息,如依赖、插件配置等,这有助于减少重复配置,并保持项目的一致性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JavaSE:9、数组
  • 3. 进阶指南:自定义 Prompt 提升大模型解题能力
  • 记录word转xml文件踩坑
  • 机器学习特征构建与特征筛选
  • Vue3实现打印功能
  • LeetCode[中等] 3. 无重复字符的最长子串
  • 简洁明了!中缀表达式转为后缀表达式规则及代码
  • 第L6周:机器学习-随机森林(RF)
  • 计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
  • Python和MATLAB及C++信噪比导图(算法模型)
  • python绘制3d建筑
  • 数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)
  • 排队免单模式小程序开发
  • ElementUI 布局——行与列的灵活运用
  • 初学Linux(学习笔记)
  • [译] 怎样写一个基础的编译器
  • 10个最佳ES6特性 ES7与ES8的特性
  • 4. 路由到控制器 - Laravel从零开始教程
  • angular2 简述
  • Laravel核心解读--Facades
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python语法速览与机器学习开发环境搭建
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 通过npm或yarn自动生成vue组件
  • 原生 js 实现移动端 Touch 滑动反弹
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​字​节​一​面​
  • # include “ “ 和 # include < >两者的区别
  • # 飞书APP集成平台-数字化落地
  • #{}和${}的区别?
  • $$$$GB2312-80区位编码表$$$$
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)VC++中ondraw在什么时候调用的
  • .gitattributes 文件
  • .NET C# 使用 iText 生成PDF
  • .Net core 6.0 升8.0
  • .NET Core 项目指定SDK版本
  • .NET Standard 的管理策略
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net打印*三角形
  • .net开发时的诡异问题,button的onclick事件无效
  • .stream().map与.stream().flatMap的使用
  • @private @protected @public
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [AIGC] SpringBoot的自动配置解析
  • [ajaxupload] - 上传文件同时附件参数值