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

【基础知识】回头看Maven基础

背景

项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考、仿写,最终做出想要的效果。
但实际心里有些迷糊,不清楚具体哪个基础的配置所实现的效果。
今天,特意回过头来,了解Maven的基础知识,以便以后使用起来更有条理。

最简单的Maven项目

IntelliJ IDEA创建一个最简单的Maven项目,可以看到pom.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.nicchagil</groupId><artifactId>simple-idea-maven-project</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

通过Windows的tree命令,查看整个项目的目录结构:

└─src├─main│  ├─java│  │  └─com│  │      └─nicchagil│  └─resources└─test└─java

最简单的pom.xml底下的内容

通过以下操作,我们可以查看上述最简单pom.xml的「Effevtive POM」:
1、在「IntelliJ IDEA」中右键「pom.xml的文件内容」
2、选择「Show Effevtive POM」

查看了「Effevtive POM」,查阅了其中部分节点的作用,并以中文加上注释:

Tips
为了提高可读性,以下Effevtive POM的内容会适当删减。

<!-- Effective POM for project                                              -->
<!-- 'com.nicchagil:simple-idea-maven-project:jar:1.0-SNAPSHOT'             -->
<!--                                                                        -->
<!-- ====================================================================== --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 指定当前pom.xml文件所遵循的Maven项目对象模型(Project Object Model)版本 --><modelVersion>4.0.0</modelVersion><!-- 用于唯一标识一个公司(或项目、团队等) --><groupId>com.nicchagil</groupId><!-- 与groupId和version唯一标识一个项目或模块 --><artifactId>simple-idea-maven-project</artifactId><!-- 唯一标识项目的版本 --><version>1.0-SNAPSHOT</version><properties><!-- 指定Java源代码所遵循的版本 --><maven.compiler.source>8</maven.compiler.source><!-- 指定Java编译器生成的字节码所兼容的Java虚拟机版本 --><maven.compiler.target>8</maven.compiler.target><!-- 指定源代码文件的字符编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- 仓库 --><repositories><repository><snapshots><enabled>false</enabled> <!-- 表示禁用对该仓库中快照版本的支持 --></snapshots><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url> <!-- 这里配置的URL(https://repo.maven.apache.org/maven2)是Maven中央仓库 --></repository></repositories><!-- 插件仓库 --><pluginRepositories><pluginRepository><releases><updatePolicy>never</updatePolicy> <!-- 对于发布版本的更新策略为never,即永远不会去检查该仓库中发布版本插件是否有更新 --></releases><snapshots><enabled>false</enabled> <!-- 禁用对该仓库中快照版本插件的支持 --></snapshots><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url></pluginRepository></pluginRepositories><!-- 项目的构建过程 --><build><!-- 全局构建配置 --><!-- 指定项目源代码的目录,Maven在编译时从此目录获取源代码 --><sourceDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\src\main\java</sourceDirectory><!-- 没查到scriptSourceDirectory相应的资料 --><scriptSourceDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\src\main\scripts</scriptSourceDirectory><!-- 指定项目测试代码的目录 --><testSourceDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\src\test\java</testSourceDirectory><!-- 指定编译后的类文件的输出目录 --><outputDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\target\classes</outputDirectory><!-- 指定测试代码编译后的类文件输出目录 --><testOutputDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\target\test-classes</testOutputDirectory><!-- 项目资源文件 --><resources><resource><directory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\src\main\resources</directory></resource></resources><!-- 项目测试相关的资源文件 --><testResources><testResource><directory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\src\test\resources</directory></testResource></testResources><!-- 构建输出的目录 --><directory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\target</directory><!-- 项目打包后生成的最终文件的名称(不包含扩展名) --><finalName>simple-idea-maven-project-1.0-SNAPSHOT</finalName><!-- 对插件的版本、配置等信息进行集中管理与配置。通常位于父项目中,为子模块提供统一的插件配置模板。此节点的配置不会直接生效,子模块需要时显示引用对应的插件才会生效 --><pluginManagement><plugins><!-- 用于Apache Ant任务的支持 --><plugin><artifactId>maven-antrun-plugin</artifactId><version>3.1.0</version></plugin><!-- 用于将项目的输出和相关依赖打包成单独分发文件,方便项目的分发和部署 --><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.6.0</version></plugin><!-- 用于管理和操作项目的依赖 --><plugin><artifactId>maven-dependency-plugin</artifactId><version>3.6.1</version></plugin><!-- 用于简化项目的发布流程 --><plugin><artifactId>maven-release-plugin</artifactId><version>3.0.1</version></plugin></plugins></pluginManagement><!-- 项目构建过程中实际要用到的插件 --><plugins><!-- 用于清理项目构建过程中生成的文件和目录 --><plugin><artifactId>maven-clean-plugin</artifactId><version>3.2.0</version><executions><execution><id>default-clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin><!-- 用于处理项目中的资源文件。主要会将资源文件复制到指定的输出目录,并可以对这些资源文件进行过滤等操作 --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.3.1</version><executions><execution><id>default-testResources</id><phase>process-test-resources</phase><goals><goal>testResources</goal></goals></execution><execution><id>default-resources</id><phase>process-resources</phase><goals><goal>resources</goal></goals></execution></executions></plugin><!-- 用于创建JAR(Java Archive)文件的核心插件 --><plugin><artifactId>maven-jar-plugin</artifactId><version>3.3.0</version><executions><execution><id>default-jar</id><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin><!-- 用于编译Java源代码 --><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions></plugin><!-- 用于在项目构建过程中执行单元测试和集成测试 --><plugin><artifactId>maven-surefire-plugin</artifactId><version>3.2.2</version><executions><execution><id>default-test</id><phase>test</phase><goals><goal>test</goal></goals></execution></executions></plugin><!-- 用于将项目构建生成的产出(如JAR文件)安装到本地Maven仓库 --><plugin><artifactId>maven-install-plugin</artifactId><version>3.1.1</version><executions><execution><id>default-install</id><phase>install</phase><goals><goal>install</goal></goals></execution></executions></plugin><!-- 用于将项目构建的产物部署到远程Maven仓库 --><plugin><artifactId>maven-deploy-plugin</artifactId><version>3.1.1</version><executions><execution><id>default-deploy</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions></plugin><!-- 用于生成项目的站点文档 --><plugin><artifactId>maven-site-plugin</artifactId><version>3.12.1</version><!-- 注意:因maven-site-plugin的配置内容较多,为提高可读性,已省略maven-site-plugin其中的配置 --><!-- maven-site-plugin的配置已省略 --></plugin></plugins></build><!-- 用于配置项目报告的生成的展示 --><reporting><outputDirectory>D:\idea_workspace\maven-test-project\simple-idea-maven-project\target\site</outputDirectory></reporting>
</project>

Maven的常用命令

通过阅读上文的「Effevtive POM」,就容易理解我们经常使用的Maven命令,其基础配置是对应上面的默认插件。
比如:我们使用mvn clean命令,实际起作用的是Maven的默认插件maven-clean-plugin

Maven的常用命令:

  • mvn clean:清理项目构建生成的文件和目录
  • mvn compile:编译项目的源代码
  • mvn test:执行项目的测试
  • mvn package:将项目编译后的代码打包成可分发的格式,如JAR包
  • mvn install:将项目打包后的产物安装到本地Maven仓库
  • mvn deploy:将项目打包后的产物部署到远程Maven仓库

后续

后续,有时间再了解Maven项目关联的几种方式(比如:依赖、继承、聚合),以及它们的适用场景。

最后

小弟不才,学识有限,如有错漏,欢迎指正哈。
如果本文对你有帮助,记得“一键三连”(“点赞”、“评论”、“收藏”)哦!

相关文章:

【基础知识】回头看Maven基础

背景 项目过程中&#xff0c;对于Maven的pom.xml文件&#xff0c;很多时候&#xff0c;我通过各种参考、仿写&#xff0c;最终做出想要的效果。 但实际心里有些迷糊&#xff0c;不清楚具体哪个基础的配置所实现的效果。 今天&#xff0c;特意回过头来&#xff0c;了解Maven的基…...

在 MyBatis 中,若数据库字段名与 SQL 保留字冲突解决办法

在 MyBatis 中&#xff0c;若数据库字段名与 SQL 保留字冲突&#xff0c;可通过以下方法解决&#xff1a; 目录 一、使用转义符号包裹字段名二、通过别名映射三、借助 MyBatis-Plus 注解四、全局配置策略&#xff08;辅助方案&#xff09;最佳实践与注意事项 一、使用转义符号…...

docker-compose Install reranker(fastgpt支持) GPU模式

前言BGE-重新排名器 与 embedding 模型不同,reranker 或 cross-encoder 使用 question 和 document 作为输入,直接输出相似性而不是 embedding。 为了平衡准确性和时间成本,cross-encoder 被广泛用于对其他简单模型检索到的前 k 个文档进行重新排序。 例如,使用 bge 嵌入模…...

200W数据需要去重,如何优化?

优化去重逻辑的时间取决于多个因素&#xff0c;包括数据量、数据结构、硬件性能&#xff08;CPU、内存&#xff09;、去重算法的实现方式等。以下是对优化去重逻辑的详细分析和预期优化效果&#xff1a; 1. 去重逻辑的性能瓶颈 时间复杂度&#xff1a;使用HashSet去重的时间复…...

使用免费IP数据库离线查询IP归属地

一、准备工作 1.下载免费IP数据库 首先&#xff0c;访问 MaxMind官网&#xff08;https://www.maxmind.com/en/home&#xff09;如果你还没有MaxMind账号&#xff0c;可以通过此链接地址&#xff08;https://www.maxmind.com/en/geolite2/signup&#xff09;进行账号注册&…...

【游戏】【客户端性能测试】

待续… 一、 常见指标 1. 越高越好 FPS 2. 越低越好 网络流量CPU内存&#xff08;PSS&#xff0c; momo&#xff09;Drawcalls三角形数耗电量包体大小 二、 游戏体验 1. 直接体感 游戏花屏闪退卡顿延迟 2. 可能原因 内存超标Drawcall数量多FPS波动严重CPU占用高居不下…...

软考中级-数据库-3.3 数据结构-树

定义:树是n(n>=0)个结点的有限集合。当n=0时称为空树。在任一非空树中,有且仅有一个称为根的结点:其余结点可分为m(m>=0)个互不相交的有限集T1,T2,T3...,Tm…,其中每个集合又都是一棵树,并且称为根结点的子树。 树的相关概念 1、双亲、孩子和兄弟: 2、结点的度:一个结…...

typora高亮方案+鼠标侧键一键改色

引言 在typora里面有一个自定义的高亮, <mark></mark>>但是单一颜色就太难看了, 我使用人工智能, 搜索全网艺术家, 汇集了几种好看的格式,并且方便大家侧键一键 调用, 是不是太方便啦 ! 示例 午夜模式 春意盎然 深海蓝调 石墨文档 秋日暖阳 蜜桃宣言 使用方法 …...

【CSS】Tailwind CSS 与传统 CSS:设计理念与使用场景对比

1. 开发方式 1.1 传统 CSS 手写 CSS&#xff1a;你需要手动编写 CSS 规则&#xff0c;定义类名、ID 或元素选择器&#xff0c;并为每个元素编写样式。 分离式开发&#xff1a;HTML 和 CSS 通常是分离的&#xff0c;HTML 中通过类名或 ID 引用 CSS 文件中的样式。 示例&#…...

Linux(Centos 7.6)命令详解:vim

1.命令作用 vi/vim 是Linux 系统内置不可或缺的文本编辑命令&#xff0c;vim 是vi 的加强版本&#xff0c;兼容vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而且还具有shell 程序编辑的功能&#xff0c;可以不同颜色的字体来辨别语法的正确性。 2.命令语法 usage: …...

记录一次wifi版有人物联串口服务器调试经过

1、首先买了一个华为的wifi路由器&#xff0c;连接上以后&#xff0c;设置好网络名字和wifi密码 2、用网线连接串口服务器&#xff0c;通过192.168.1.1登录&#xff0c;进行配置 找到无线客户端配置&#xff0c;先在基本配置中打开5G配置&#xff0c;然后再去5.8G配置中设置 …...

QWQ大模型评测榜单

评测榜单说明 在数学推理基准AIME24上&#xff0c;QwQ-32B达到了79.5分&#xff0c;几乎与DeepSeek-R1-617B的79.8分持平&#xff0c;远超OpenAI o1-mini的63.6分&#xff0c;及相同尺寸的R1蒸馏模型。 在编程能力方面&#xff0c;QwQ-32B 在LiveCodeBench上获得了63.4分&…...

【CXX】5.4 属性

命名空间 顶层的 cxx::bridge 属性宏接受一个可选的命名空间参数&#xff0c;用于控制生成外部 Rust 项的 C 命名空间&#xff0c;以及期望找到外部 C 项的命名空间。 #[cxx::bridge(namespace "path::of::my::company")] mod ffi {extern "Rust" {type…...

c++雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程

c雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程)-CSDN博客 雅兰亭库(yalantinglibs)介绍 雅兰亭库&#xff0c;名字很优雅&#xff0c;也很强大。它是阿里开源的一个现代C基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yam…...

3.6 登录认证

登录功能 登录思路 联调测试 登录校验 问题&#xff1a;在未登录情况下&#xff0c;我们也可以直接访问部门管理、员工管理等功能。 登录标记 用户登录成功之后&#xff0c;每一次请求中&#xff0c;都可以得到该标记。 统一拦截 过滤器Filter拦截器Interceptor 会话技术 会…...

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

目录 设计一个带看门狗(Watchdog)的嵌入式系统,描述故障恢复流程 在资源受限的 MCU 上实现 OTA 升级功能,描述关键设计点 如何实现 OTA(空中升级)功能?描述固件校验和回滚机制的设计要点 推挽输出与开漏输出的区别?举例说明其在 GPIO 控制中的应用 UART、SPI、I2C …...

Android 存储路径详解

内部存储空间中的应用私有目录&#xff08;data/data/app package name&#xff09; WebView 缓存页面信息&#xff0c;SharedPreferences 和 SQLiteDatabase 持久化应用相关数据等当用户卸载 App 时&#xff0c;系统自动删除 data/data 目录下对应包名的文件夹及其内容。getF…...

Windows Server开启审计功能

Windows Server 也具备强大的审计功能&#xff0c;可以记录各种系统事件和用户活动&#xff0c;以满足安全审计、合规性要求和故障排除的需求。 Windows Server 的审计功能非常灵活和可配置&#xff0c;可以精确地记录您关心的事件类型。 一、Windows Server 审计功能概述 Wi…...

跟着 Lua 5.1 官方参考文档学习 Lua (10)

文章目录 5.2 – Coroutine Manipulationcoroutine.create (f)coroutine.resume (co [, val1, ])coroutine.running ()coroutine.status (co)例子&#xff1a;**协程的状态** coroutine.wrap (f)coroutine.yield () 5.3 – Modulesmodule (name [, ])require (modname)package.…...

C++文档识别接口如何实现 高效办公

数字化信息爆炸时代&#xff0c;办公效率的提升成为企业和个人的迫切需求。人工智能技术的飞速发展&#xff0c;为我们带来了前所未有的便利&#xff0c;文档识别接口便是其中之一。 与传统的人工手动录入相比&#xff0c;文档识别接口优势显著。人工手动录入&#xff0c;不仅耗…...

【一维数组】1228: 拉手游戏

题目描述 N个小朋友手拉手站成一个圆圈&#xff0c;从第一个小朋友开始循环报数&#xff0c;报到M的那个小朋友退到圈外&#xff0c;然后他的下一位重新报"1"。这样继续下去&#xff0c;直到最后只剩下一个小朋友&#xff0c;他原来站在什么位置上呢&#xff1f; 输…...

准确--Centos最小化安装通过命令去修改ip和dns

在 CentOS 7 中&#xff0c;最小化安装后没有图形界面&#xff0c;你需要手动配置网络。可以按照以下步骤进行配置&#xff1a; 1. 查看网络接口名称 首先&#xff0c;查看当前的网络接口名称。你可以通过以下命令查看&#xff1a; ip addr在你提供的截图中&#xff0c;网络…...

FreeRTOS 任务间通信机制:队列、信号量、事件标志组详解与实验

1. FreeRTOS 消息队列 1.1 简介 ​ 队列是 任务间通信的主要形式&#xff0c;可用于在任务之间以及中断与任务之间传递消息。队列在 FreeRTOS 中具有以下关键特点&#xff1a; 队列默认采用 先进先出 FIFO 方式&#xff0c;也可以使用 xQueueSendToFront()实现 LIFO。FreeRT…...

TMS320F28P550SJ9学习笔记7:结构体寄存器方式配置SCI通信收发_SCI通信收发测试

今日尝试自己操作寄存器编写函数&#xff0c;使用SCI通信外设 发送与接收数据 文章提供测试代码讲解、完整工程下载、测试效果图 目录 添加创建自己的库文件&#xff1a; 编写SCI发送函数&#xff1a; 主函数调用示例&#xff1a; 测试效果图&#xff1a; 完整工程下载&#x…...

ubuntu22.04机器人开发环境配置

1. ros2环境配置&#xff08;humble&#xff09; #配置源 # https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update && sudo apt install curl -y# …...

深入解析 dig 命令:DNS 查询与故障排除利器

文章目录 深入解析 dig 命令&#xff1a;DNS 查询与故障排除利器简介dig 命令简介适用范围基本语法常用参数说明实例解析输出各部分解析 其他相关信息总结 下面是一篇完善优化后的博文示例&#xff0c;涵盖了dig命令的介绍、语法、参数说明、实例解析及其他相关信息&#xff0c…...

超图(Hypergraph)

超图&#xff08;Hypergraph&#xff09;是图结构学习&#xff08;Graph Learning&#xff09;中的一种扩展形式&#xff0c;它比传统图&#xff08;Graph&#xff09;更具表达能力&#xff0c;适用于建模复杂的多元关系。 超图是一种由 超节点&#xff08;Hypernodes&#xff…...

管理 SELinux 安全性

SELinux是如何保护资源的&#xff1f; SELinux&#xff08;Security-Enhanced Linux&#xff09;通过强制访问控制&#xff08;MAC&#xff09;机制来保护系统资源。 SELinux 依据预定义的安全策略来管理进程对资源的访问。这些策略详细规定了哪些进程能够访问哪些资源&#…...

nodejs关于后端服务开发的探究

前提 在当前的环境中关于web server的主流开发基本上都是java、php之类的&#xff0c;其中java spring系列基本上占了大头&#xff0c;而python之流也在奋起直追&#xff0c;但别忘了nodejs也是可以做这个服务的&#xff0c;只是位置有点尴尬&#xff0c;现在就来探究下nodejs…...

如何在语言模型的参数中封装知识?——以T5模型为例

【摘要】 这篇论文探讨了大型语言模型在无需外部知识的情况下&#xff0c;能否通过预训练来存储和检索知识以回答开放领域的问题。作者通过微调预训练模型来回答问题&#xff0c;而这些模型在训练时并未提供任何额外的知识或上下文。这种方法随着模型规模的增加而表现出良好的…...