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

版本日期修订人描述
V1.02025/3/7nick huang创建文档

背景

项目过程中,对于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项目关联的几种方式(比如:依赖、继承、聚合),以及它们的适用场景。

最后

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

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

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

相关文章

ROS实践(四)机器人SLAM建图(gmapping)

目录 一、SLAM技术 二、常用工具和传感器 三、相关功能包 1. gmapping建图功能包 2. map_server 四、SLAM 建图实验 1. 配置gmapping(launch文件) 2. 启动机器人仿真(含机器人以及传感器) 3. 运行gmapping节点 4. 启动rviz可视化工具 5. 保存地图文件 一、SLAM技…

二进制安装指定版本的MariaDBv10.11.6

一、官网下载mariadb安装包 Download MariaDB Server - MariaDB.org 找到对应的版本 下载安装包后上传到服务器这里不再赘述。 二、安装二进制包 1、解压安装包 2、查看安装包内的安装提示文档根据提示文档进行安装 # 解压安装包 tar xf mariadb-10.11.6-linux-systemd-x8…

【抽奖项目】|第二篇

前言&#xff1a; 高并发的活动预热肯定不可以在数据库操作&#xff0c;需要redis&#xff0c;特别是这种秒杀活动更是需要注意&#xff0c;所以可以在高并发的前夕先进行活动预热。 思路&#xff1a; 1、 通过定时任务调度每分钟查询数据库也没有需要预热的活动 2、采用分布式…

异或和之和 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

异或和之和 题目来源 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组 原题链接 蓝桥杯 异或和之和 https://www.lanqiao.cn/problems/3507/learning/ 问题描述 问题分析 要点1:异或运算 概念 异或(Exclusive OR,简称 XOR)是一种数学运算符,常用于逻辑运算与计算机…

从零到一:如何系统化封装并发布 React 组件库到 npm

1. 项目初始化 1.1 创建项目 首先&#xff0c;创建一个新的项目目录并初始化 package.json 文件。 mkdir my-component-library cd my-component-library npm init -y1.2 安装依赖 安装开发所需的依赖项&#xff0c;如构建工具、测试框架等。 npm install --save-dev webp…

现代互联网网络安全与操作系统安全防御概要

现阶段国与国之间不用对方路由器&#xff0c;其实是有道理的&#xff0c;路由器破了&#xff0c;内网非常好攻击&#xff0c;内网共享开放端口也非常多&#xff0c;更容易攻击。还有些内存系统与pe系统自带浏览器都没有javascript脚本功能&#xff0c;也是有道理的&#xff0c;…

2025-03-12 学习记录--C/C++-PTA 习题8-4 报数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题8-4 报数 报数游戏是这样的&#xff1a;有n个人围成一圈&#xff0c;按顺序从1到n编好号。从第一个人开…

【js逆向】某预约票网站 (webpack技术)

1、查看数据包 calendar是需要的数据包&#xff0c;看下它的请求参数。 accTimes参数加密&#xff0c;_times是时间戳。 2、全局搜索 accTimes 关键字 3、n的定义 4、把整个js代码复制下来&#xff0c;应用到了webpack技术&#xff0c;图中的Q是n

前端模块管理新思路:如何使用 Import Maps

前言 前端开发中&#xff0c;我们常常需要使用各种库和模块来构建功能丰富的应用。在传统方式中&#xff0c;管理这些库和模块的引用可能会有些繁琐。 幸运的是&#xff0c;Import Maps 的出现为我们提供了一种更简洁和高效的解决方案。今天我们就来聊聊如何使用 Import Maps。…

AI模型的构建过程是怎样的(下)

你好,我是舒旻。 上节课,我们讲了一个模型构建的前 2 个环节,模型设计和特征工程。今天,我们继续来讲模型构建的其他 3 个环节,说说模型训练、模型验证和模型融合中,算法工程师的具体工作内容,以及 AI 产品经理需要掌握的重点。 模型训练 模型训练是通过不断训练、验证…

人工智能混合编程实践:Python ONNX进行图像超分重建

人工智能混合编程实践:Python ONNX进行图像超分重建 前言相关介绍Python简介ONNX简介图像超分辨率重建简介应用场景前提条件实验环境项目结构使用Python ONNX进行图像超分重建sr_py_infer.py参考文献前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击…

视频理解之Actionclip(论文宏观解读)

配合解读代码解读 1.研究背景 1. 视频行为识别的重要性 视频行为识别是视频理解领域的核心任务之一&#xff0c;旨在通过分析视频内容来识别和分类其中的人物行为或活动。这一任务在多个领域具有重要的应用价值&#xff0c;例如智能监控、人机交互、自动驾驶、医疗健康等。随…

【mysql】centOS7安装mysql详细操作步骤!

【mysql】centOS7安装mysql详细操作步骤&#xff01;—通过tar包方式 需要 root 权限&#xff0c;使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包&#xff0c;以8为例 打开 MySQL 官方 yum 仓库网站&#xff0c;获取与当前 CentOS …

【网络编程】事件选择模型

十、基于I/O模型的网络开发 10.9 事件选择模型 10.0.1 基本概念 事件选择(WSAEventSelect) 模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模 型类似的是&#xff0c;它也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知&#xff0c;最 主要的差别在…

STM32 F407ZGT6开发板

#ifndef _tftlcd_H #define _tftlcd_H #include "system.h" //定义LCD彩屏的驱动类型 可根据自己手上的彩屏背面型号来选择打开哪种驱动 //#def…

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

鸿蒙模拟器运行NDK项目失败 9568347

鸿蒙编译NDK项目 模拟器运行NDK项目失败 9568347 23:32:17.572: $ hdc file send D:\study\hongmeng\MyTestNdk\entry\build\default\outputs\default\entry-default-unsigned.hap "data/local/tmp/9fff4611338a424bb31b521bdc3555af" in 30 ms 23:32:17.651: $ hd…

uniapp+Vue3 开发小程序的下载文件功能

小程序下载文件&#xff0c;可以先预览文件内容&#xff0c;然后在手机上打开文件的工具中选择保存。 简单示例&#xff1a;&#xff08;复制到HBuilder直接食用即可&#xff09; <template><view class"container-detail"><view class"example…

电机控制常见面试问题(九)

文章目录 一、谈谈电机死区时间1.死区时间过短的后果&#xff1a;2.如何判断死区时间不足?3.解决方案 二、请描述对实时操作系统&#xff08;RTOS&#xff09;的理解三.解释FOC算法的原理并比较与其他无刷电机控制算法的优劣四.什么是电机堵转&#xff0c;如何避免电机堵转五.…

【分布式】聊聊分布式id实现方案和生产经验

对于分布式Id来说&#xff0c;在面试过程中也是高频面试题&#xff0c;所以主要针对分布式id实现方案进行详细分析下。 应用场景 对于无论是单机还是分布式系统来说&#xff0c;对于很多场景需要全局唯一ID&#xff0c; 数据库id唯一性日志traceId 可以方便找到日志链&#…