《深入理解Maven:构建工具、常用命令与项目包技巧解析》

简介: 《深入理解Maven:构建工具、常用命令与项目包技巧解析》

在后端领域开发中,我们构建项目常用到了Maven和Gradle两种构建工具,我还用的更多的是Maven构建工具,其中涉及到了Maven的一些操作,比如:clean、Package、install等等命令。这些命令到底在干什么?具体含义与作用?本文将结合工作实际案例进行总结。

何为构建工具 | Tools

在实际项目开发中,程序员最怕什么?那就是项目的配置!环境的配置,导包,部署项目,导入依赖这些杂活。在这个过程中,光是配置工作就会占据你的大部分开发工作,你实际专注业务开发的精力就不多了。所以自动化构建工具就出现了。

自动化项目构建工具是一种能够自动执行项目构建过程的软件工具。这些工具能够自动化地将源代码转换成可执行的程序或库,以及进行其他相关的构建任务,如编译、测试、打包和发布等。

自动化项目构建工具的出现极大地提高了开发效率,减少了手动执行构建任务时可能出现的错误。它们通常具备以下功能:

  1. 自动化构建:根据项目的配置和依赖关系,自动执行构建流程,无需人工干预。
  2. 依赖管理:自动下载、管理和更新项目所需的依赖库和框架。
  3. 编译和打包:将源代码编译成可执行文件或库,并按照指定格式进行打包。
  4. 测试:自动运行单元测试、集成测试等,确保代码的质量和稳定性。
  5. 发布:将构建好的程序或库发布到指定的位置,如本地文件系统、远程仓库或应用商店等。

常见的自动化项目构建工具有Maven、Gradle、Grunt等。这些工具都提供了丰富的配置选项和插件系统,使得开发者能够根据自己的需求定制构建流程。同时,它们也支持跨平台使用,可以在不同的操作系统和环境中进行项目构建。

通过使用自动化项目构建工具,开发者可以更加专注于编写高质量的代码,而无需花费大量时间和精力在繁琐的构建任务上。这有助于提升项目的开发效率、降低维护成本,并促进团队协作和持续集成等最佳实践的实施。


Maven插件的常用命令 | Commond

使用Maven命令,通常我都是直接通过IDEA进行的,不太喜欢命令行。接下来我们通过一个项目来说明Maven插件下的clean,compile,build,install,package区别。

clean

执行该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件。

当我们运行一个项目以后,项目下方会生成一个target文件,里面装满了编译好的类文件!

当我们执行一下右边的clean命令以后,就会这样:

总结 | Summary

执行该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件。

compile

编译命令,只编译选定的目标,不管之前是否已经编译过,会在你的项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件。

其实这一步工作可以帮助你检查一下你的代码是否有基础的语法错误。

总结 | Summary

你的项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件。

package

这个 package命令首先自带了上面 compile命令,能够帮你检查语法,帮你生成一个target文件,能够帮你将项目打包成一个jar或者war包。

运行一下这个命令:

我们发现在target目录下会多出一个jar包,我们就可以选择将这个jar包放到其他项目的lib文件下,提供外部依赖引入,也可以将这个jar包放到服务器上运行,也可以在本地直接运行这个jar包,在这里我将直接演示在本地运行这个jar包。

总结 | Summary

帮你将项目打包成一个jar或者war包。

install

在上面的命令 package命令可以将一个项目打成jar包,然后外部项目去导入这个jar进行外部依赖导入,但是这有一个致命问题:当一个项目需要成百上千的jar包导入的时候,都去外部导入吗?这样就会很麻烦,这个时候我们不得不用POM文件,通过坐标的概念将外部jar包引入,这个时候外部jar包就不要放在每个项目的lib文件下,而是放到本地仓库里即可。

我们通过一个例子来说明,现在有两个项目A和B,我们需要将A项目打成jar包,然后将这个jar包放到B项目的lib文件下引入:

将jar包放到B项目:

我们现在的问题是,这个lib文件下如果放了成百上千jar是不是很麻烦,所以我们通过如下B项目的POM文件进行引入:

我们发现 在B 项目通过坐标引入A项目依赖报错,找不到。怎么办?那就需要将A项目打包放到远程仓库里,所以这个时候我们要用 install命令。

首先在A项目中用install命令:

这个时候我们在B项目中引入这个jar包就能成功了:

总结 | Summary

该命令包含了package命令功能,不但会在项目路径下生成class文件和jar包,同时会在你的本地maven仓库生成jar文件,供其他项目使用(如果没有设置过maven本地仓库,一般在用户/.m2目录下。如果a项目依赖于b项目,那么install b项目时,会在本地仓库同时生成pom文件和jar文件,解决了上面打包package出错的问题)build功能类似compile,只是只对整个项目进行编译。

build和compile的区别 | Knowledge

  • Compile:只编译选定的目标,不管之前是否已经编译过。
  • Build:是对整个工程进行彻底的重新编译,而不管是否已经编译过。Build过程往往会生成发布包,这个具体要看对IDE的配置了,Build在实际中应用很少,因为开发时候基本上不用,发布生产时候一般都用ANT等工具来发布。Build因为要全部编译,还要执行打包等额外工 作,因此时间较长

项目包技巧 | Method

  • 法一:clean,package(如果报错,很可能就是jar依赖的问题,一般此问题都出现在第一次打包的情况,就用法二)
  • 法二:clean,install
目录
相关文章
|
机器学习/深度学习 人工智能 开发工具
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
Hugging Face是一个机器学习(ML)和数据科学平台和社区,帮助用户构建、部署和训练机器学习模型。它提供基础设施,用于在实时应用中演示、运行和部署人工智能(AI)。用户还可以浏览其他用户上传的模型和数据集。Hugging Face通常被称为机器学习界的GitHub,因为它让开发人员公开分享和测试他们所训练的模型。 本次分享如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face。
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
|
开发框架 前端开发 JavaScript
Python 有哪些Web框架?比如Flask、Django等知识梳理
Python 有哪些Web框架?比如Flask、Django等知识梳理
642 1
|
11月前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
9月前
|
SQL 人工智能 关系型数据库
AI时代下的PolarDB:In-DB一体化模型训练与推理服务
本次分享主题为“AI时代下的PolarDB:In-DB一体化模型训练与推理服务”,由阿里云资深专家贾新华和合思信息刘桐炯主讲。内容涵盖PolarDB的关键能力、AI硬件与软件结构支持、典型应用场景(MLops、ChatBI、智能搜索),以及合思实践案例——AI对话机器人提升客户响应效率。通过简化流程、SQL统一管理及内置算法,PolarDB显著降低了AI应用门槛,并在多个行业实现最佳实践。
379 3
|
前端开发 JavaScript Java
Spring Boot中的数据校验
Spring Boot中的数据校验
|
机器学习/深度学习 算法 开发工具
Python Web开发工具
Python Web开发工具
235 4
|
数据采集 存储 数据可视化
数加产品家族图解:一站式大数据处理与分析解决方案
数加产品家族作为阿里云一站式大数据处理与分析解决方案的重要组成部分,以其全面的功能和强大的性能,为企业提供了从数据采集、存储、处理到分析的全链路解决方案。通过图解的形式,我们深入解析了数加产品家族的各个组成部分和优势特点,展现了其在大数据处理与分析领域的独特魅力。未来,随着大数据技术的不断发展和应用场景的不断拓展,数加产品家族将继续发挥其重要作用,为企业
|
Kubernetes 监控 Java
有了k8s还需要gateway网关,nacos配置中心吗
在Kubernetes环境中,服务网关(如Spring Cloud Gateway)和Nacos配置中心补充了k8s的不足。Nacos提供灵活服务路由和动态配置更新,超越k8s基础服务发现。它还支持更复杂的配置管理和实时推送,以及环境隔离和版本控制。作为服务注册中心,Nacos增强k8s服务治理能力,保持技术一致性,并提供额外的安全层及监控功能。
770 0
|
XML JSON Java
@PostMapping 必须加上@RequestBody吗
@PostMapping 必须加上@RequestBody吗
491 2
|
前端开发 开发者 容器
CSS进阶-盒模型调整:box-sizing
【6月更文挑战第14天】`box-sizing`属性在CSS中调整盒模型行为,让元素宽度和高度包含内容、内边距和边框。默认是`content-box`,仅计算内容区,而`border-box`则包含所有。不一致的布局、预期尺寸不符和复杂计算错误是常见问题。使用`* { box-sizing: border-box; }`可简化布局,确保元素尺寸直观一致。了解和正确使用`box-sizing`能提升布局效率和准确性。
288 0