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

文章目录

    • 何为构建工具 | Tools
    • Maven插件的常用命令 | Commond
      • clean
        • 总结 | Summary
      • compile
        • 总结 | Summary
      • package
        • 总结 | Summary
      • install
        • 总结 | Summary
    • build和compile的区别 | Knowledge
    • 项目包技巧 | Method

在后端领域开发中,我们构建项目常用到了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文件。

image-20240318101529254

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

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

image-20240318101718886

总结 | Summary

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

compile

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

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

在这里插入图片描述

总结 | Summary

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

package

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

运行一下这个命令:

image-20240318103135854

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

image-20240318103720805

总结 | Summary

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

install

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

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

image-20240318104441191

将jar包放到B项目:

image-20240318104556975

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

image-20240318104801411

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

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

image-20240318105349683

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

image-20240318105455633

总结 | 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Science Robotics 封面论文:美国宇航局喷气推进实验室开发了自主蛇形机器人,用于冰雪世界探索

人们对探索冰冷的卫星(如土卫二)的兴趣越来越大,这可能具有天体生物学意义。然而,由于地表或冰口内的环境极端,获取样本具有挑战性。美国宇航局的喷气推进实验室正在开发一种名为Exobiology Extant Life Surveyor&…

ChatGPT:激发学术创新,引领论文写作进程!

ChatGPT无限次数:点击跳转 摘要: 随着人工智能技术的不断发展,ChatGPT成为了学术界的一股清新风潮。本文将探讨ChatGPT在学术论文写作方面的独特性和潜力,并通过多个实例展示其独特的优势。通过ChatGPT,我们可以打破论文写作的瓶…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大,基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而,传统的卷积…

C/C++动态链接库的封装和调用

1 引言 静态链接库是在编译时被链接到程序中的库文件,在编译时,链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件,在编译时,可执行文件只包含对动态链接库的引用,而不…

外贸网站文章批量生成器

随着全球贸易的不断发展,越来越多的企业开始关注外贸市场,而拥有高质量的内容是吸引潜在客户的关键之一。然而,为外贸网站生产大量优质的文章内容可能是一项耗时且繁琐的任务。因此,外贸网站文章批量生成软件成为了解决这一难题的…

remote: GitLab: LFS objects are missing(pre-receive hook declined)

Git push 遇到错误: remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all". To http://192.168.x.x/xxxxxx.git! [remote rejected] dev -> dev (pre-receive hook declined) error: faile…

语音识别:whisper部署服务器(远程访问,语音实时识别文字)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…

做跨境用哪种代理IP比较好?怎么选到干净的IP?

代理IP对于做跨境的小伙伴来说,都是必不可少的工具,目前出海的玩法已经是多种多样,开店、账号注册、短视频运营、直播带货、网站SEO等等都是跨境人需要涉及到的业务。而国外代理IP的获取渠道非常多,那么做跨境到底应该用哪种代理I…

linux开机启动设置方法

开机启动最简单的方法是在/etc/rc.local启动脚本中写入需要执行的命令。另一种方式是在/etc/init.d中编写一个启动脚本。但是这两种方式都不是正规的启动模式。init.d是Linux最早的服务管理方案,命令service start xxx就是去调用init.d中的启动脚本。之后init机制被…

蓝桥杯(3.18 刷真题)

P8697 [蓝桥杯 2019 国 C] 最长子序列 AC import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s1 sc.nextLine();String s2 sc.nextLine();char[] c1 s1.toCharArray();char[] c2 s2.toCh…

使用 Redisson 实现分布式 CountDownLatch,如何使用RCountDownLatch实现内外网数据互通的超时控制?

闭锁(CountDownLatch)是一种用于同步多个线程的机制,它可以让一个或多个线程等待其他线程完成某个任务后再继续执行。 在Java中,RCountDownLatch 是 Redisson 提供的分布式闭锁实现,它基于 Redis 的分布式系统&#x…

基于Spring Boot的研究生志愿填报辅助系统

摘 要 二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

掌握请求控制权:Axios 如何取消请求的两种方法

在前端开发中,网络请求是非常常见的操作。而有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请求。 基本概念 在 Axios 中&am…

【NLP03-新闻主题分类任务】

新闻主题分类任务 背景 以一段新闻报道中的文本描述内容为输入,使用模型帮助我们判断它最优可能属于哪一种类型的新闻,这是典型的文本分类问题,这里假定每种类型是互斥的,即文本描述有且只有一种类型 新闻主题分类数据 #通过t…

swagger使用手册

1.导入依赖 <!--引入swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</…

什么是集成学习

集成学习是一种机器学习方法&#xff0c;目的是将多个基本学习算法组合起来&#xff0c;以达到更好的预测性能。通过将多个模型的预测结果进行加权平均或投票&#xff0c;集成学习能够减少单个模型的偏差和方差&#xff0c;从而提高整体的泛化能力。常见的集成学习方法包括Bagg…

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计&#xff08;二&#xff09;&#xff1a;如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式&#xff0c;同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中&#xff0c;手势交互会作为XR的重要交互动作&#xff0c;因…

鸿蒙开发 一 (一)、框架了解

一、UI框架 开发范式名称 语言生态 UI更新方式 适用场景 适用人群 声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员 类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端…

视频技术1:使用ABLMediaServer推流rtsp

ABLMediaServer定位是高性能、高稳定、开箱即用、商用级别的流媒体服务器 下边展示了如何把1个mp3作为输入源&#xff0c;转换为rtsp流的过程。 作用&#xff1a;用rtsp模拟摄像头的视频流 1、启动ABLMediaServer ABLMediaServer-2024-03-13\WinX64\ABLMediaServer.exe 配…

聚类分析 | Matlab实现基于NNMF+DBO+K-Medoids的数据聚类可视化

聚类分析 | Matlab实现基于NNMFDBOK-Medoids的数据聚类可视化 目录 聚类分析 | Matlab实现基于NNMFDBOK-Medoids的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 NNMFDBOK-Medoids聚类&#xff0c;蜣螂优化算法DBO优化K-Medoids 非负矩阵分解&#xff08…