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

news2025/3/9 10:12:25

背景

项目过程中,对于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.coloradmin.cn/o/2312082.html

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

相关文章

Manus+Ollama实现本地大模型部署和应用测试

这几天Manus即DeepSeek后又突然火爆&#xff0c;我也进行了跟踪测试&#xff0c;特记录一下分享给大家&#xff0c;目前来看&#xff0c;Manus的确是一个可以进行任务分解的自动化解决方案&#xff0c;将其他AI需要多次繁杂的迭代对话做了较大的改进&#xff0c;相当于用户抛出…

【Python 数据结构 9.树】

我装作漠视一切&#xff0c;其实我在乎的太多&#xff0c;但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合&#xff0c;n0时为空树。当n大于0的时候&#xff0c;满足如下两个条件&#xff1a; ① 有且仅有一个特定的结点&#xff…

LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)

文章目录 LLM 学习&#xff08;二 完结 Multi-Head Attention、Encoder、Decoder&#xff09;Self-Attention &#xff08;自注意力机制&#xff09;结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMasked 操作Teacher Fo…

计算机网络软考

1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据&#xff0c;自下而上的解封装数据&#xff0c;实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中&#xff0c;用高电平代表 “1”、低电平代表 “0”&#xff0c…

VBA 数据库同一表的当前行与其他行的主键重复判断实现方案

目的&#xff0c;判断是否主键重复&#xff0c;不重复则登录新数据&#xff0c;重复则不登录。 定义类型&#xff1a; DataRecord   tableName 表名   rowNumber 行号   columnName 列名   data 数据 想要实现的代码逻辑如下&#xff1a; 模拟数据库的登录过程。假设…

2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB

一、山羊优化算法 山羊优化算法&#xff08;Goat Optimization Algorithm, GOA&#xff09;是2025年提出的一种新型生物启发式元启发式算法&#xff0c;灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…

网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】

网络基础&#xff08;一&#xff09; 1. 网络的发展2. 认识协议3. 网络 VS 系统4. 以太网通信原理5. 重谈协议6. 网络中的地址管理 1. 网络的发展 最开始时&#xff0c;计算机之间相互独立。 但是为了协作完成一些任务&#xff0c;就产生了计算机之间相互通讯的需求&#xff0c…

学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Animation常量汇总1.1.1 循…

常用无功功率算法的C语言实现(二)

0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…

易基因特异性R-loop检测整体研究方案

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构&#xff0c;广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…

装饰器模式--RequestWrapper、请求流request无法被重复读取

目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码&#xff0c;能看出来是把request又重新包装了一下&#xff0c;核心信息都不会改变 后面了解到这叫 装饰器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也称为包装模式(Wrapper Pat…

STM32-I2C通信协议

目录 一&#xff1a;什么是I2C通信协议 二&#xff1a;I2C通信 三&#xff1a;I2C时序图 四&#xff1a;面试常见问题 一&#xff1a;什么是I2C通信协议 I2C&#xff08;Inter-Integrated Circuit&#xff09;协议是一种串口通信协议&#xff0c;用于在集成电路之间传输数…

Unity开发——CanvasGroup组件介绍和应用

CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha&#xff1a;控制UI的透明度 类型&#xff1a;float&#xff0c;0.0 ~1.0&#xff0c; 其中 0.0 完全透明&#xff0c;1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…

C语言100天练习题【记录本】

C语言经典100题&#xff08;手把手 编程&#xff09; 可以在哔哩哔哩找到&#xff08;url:C语言经典100题&#xff08;手把手 编程&#xff09;_哔哩哔哩_bilibili&#xff09; 已解决的天数&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六&#xff0c;八&#xf…

DeepSeek【部署 03】客户端应用ChatBox、AnythingLLM及OpenWebUI部署使用详细步骤

DeepSeek客户端应用 1.ChatBox2.AnythingLLM3.OpenWebUI4.总结 客户端软件提供可视化的模型及参数配置&#xff0c;人性化的对话窗口及文件上传功能&#xff0c;大大降低了大模型的使用门槛。 1.ChatBox Chatbox AI 是一款 AI 客户端应用和智能助手&#xff0c;支持众多先进的…

Python图形编程之EasyGUI: msgbox的用法

1 EasyGUI: msgbox的用法 1.1 基础用法&#xff1a;只显示信息 示例代码&#xff1a; from easygui import * msgbox("Hello, world!")效果&#xff1a; 1.2 扩展用法1&#xff1a;设置标题 示例代码&#xff1a; from easygui import * msgbox("Hello, …

中性点直接接地电网接地故障Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.系统仿真图&#xff1a; 3.中性点直接接地电网接地故障基本概念&#xff08;本仿…

解决Jenkins默认终止Shell产生服务进程的问题

1、Windows环境 Jenkins进行Build steps的使用Execute Windows batch command启动微服务&#xff08;Jar包&#xff09;&#xff0c;Jenkins会默认终止Shell产生的服务进程&#xff0c;而在命令行能够正常运行的服务进程。 1.1 使用命令行启动服务是正常 使用命令行执行 正常…

RuleOS:区块链开发的“破局者”,开启Web3新纪元

RuleOS&#xff1a;区块链开发的“破冰船”&#xff0c;驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中&#xff0c;一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”&#xff0c;冲破传统开发的冰层&#xff0c;驶向Web3的星辰大海。这艘船&#xff0c;正以一种前所未有的姿…