【基础知识】回头看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基础
背景 项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考、仿写,最终做出想要的效果。 但实际心里有些迷糊,不清楚具体哪个基础的配置所实现的效果。 今天,特意回过头来,了解Maven的基…...

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

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

200W数据需要去重,如何优化?
优化去重逻辑的时间取决于多个因素,包括数据量、数据结构、硬件性能(CPU、内存)、去重算法的实现方式等。以下是对优化去重逻辑的详细分析和预期优化效果: 1. 去重逻辑的性能瓶颈 时间复杂度:使用HashSet去重的时间复…...

使用免费IP数据库离线查询IP归属地
一、准备工作 1.下载免费IP数据库 首先,访问 MaxMind官网(https://www.maxmind.com/en/home)如果你还没有MaxMind账号,可以通过此链接地址(https://www.maxmind.com/en/geolite2/signup)进行账号注册&…...

【游戏】【客户端性能测试】
待续… 一、 常见指标 1. 越高越好 FPS 2. 越低越好 网络流量CPU内存(PSS, momo)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:你需要手动编写 CSS 规则,定义类名、ID 或元素选择器,并为每个元素编写样式。 分离式开发:HTML 和 CSS 通常是分离的,HTML 中通过类名或 ID 引用 CSS 文件中的样式。 示例&#…...

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

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

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

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

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

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

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

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

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

跟着 Lua 5.1 官方参考文档学习 Lua (10)
文章目录 5.2 – Coroutine Manipulationcoroutine.create (f)coroutine.resume (co [, val1, ])coroutine.running ()coroutine.status (co)例子:**协程的状态** coroutine.wrap (f)coroutine.yield () 5.3 – Modulesmodule (name [, ])require (modname)package.…...

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

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

准确--Centos最小化安装通过命令去修改ip和dns
在 CentOS 7 中,最小化安装后没有图形界面,你需要手动配置网络。可以按照以下步骤进行配置: 1. 查看网络接口名称 首先,查看当前的网络接口名称。你可以通过以下命令查看: ip addr在你提供的截图中,网络…...

FreeRTOS 任务间通信机制:队列、信号量、事件标志组详解与实验
1. FreeRTOS 消息队列 1.1 简介 队列是 任务间通信的主要形式,可用于在任务之间以及中断与任务之间传递消息。队列在 FreeRTOS 中具有以下关键特点: 队列默认采用 先进先出 FIFO 方式,也可以使用 xQueueSendToFront()实现 LIFO。FreeRT…...

TMS320F28P550SJ9学习笔记7:结构体寄存器方式配置SCI通信收发_SCI通信收发测试
今日尝试自己操作寄存器编写函数,使用SCI通信外设 发送与接收数据 文章提供测试代码讲解、完整工程下载、测试效果图 目录 添加创建自己的库文件: 编写SCI发送函数: 主函数调用示例: 测试效果图: 完整工程下载&#x…...

ubuntu22.04机器人开发环境配置
1. ros2环境配置(humble) #配置源 # 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 命令:DNS 查询与故障排除利器简介dig 命令简介适用范围基本语法常用参数说明实例解析输出各部分解析 其他相关信息总结 下面是一篇完善优化后的博文示例,涵盖了dig命令的介绍、语法、参数说明、实例解析及其他相关信息,…...

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

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

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

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