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

[Maven 基础课程]再看下第一个 Maven 项目

项目的目录结构

.
├── src/                          # 项目源代码和资源根目录
│   ├── main/                     # 项目主代码和资源
│   │   ├── java/                 # 存放所有 Java 源代码
│   │   │   └── com/              # 对应 groupId 的第一个部分
│   │   │       └── example/      # 对应 groupId 的第二个部分
│   │   │           └── Main.java # 你的主类文件
│   │   └── resources/            # 存放非 Java 源代码的资源文件
│   └── test/                     # 存放测试代码和资源
│       ├── java/                 # 存放所有测试 Java 代码
│       └── resources/            # 存放测试用到的资源文件
├── .gitignore                    # Git 版本控制忽略文件
└── pom.xml                       # 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.example</groupId><artifactId>fist_my_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>

pom.xml 文件解释:

文件头

<?xml version="1.0" encoding="UTF-8"?>,这是 XML 文件的标准头部声明,指定了 XML 版本和文件编码。这是所有 XML 文件的通用格式。

<project ...>,这是 pom.xml 文件的根标签。所有的 Maven 项目配置都必须包含在这个标签内。xmlns 和 xmlns:xsi: 这两个是 XML 的命名空间声明,指定了 pom.xml 文件所遵循的 XML 模式(Schema)。这是为了让 XML 编辑器或解析器能够正确验证文件的结构。xsi:schemaLocation: 指定了 XML 模式文件的位置。这可以帮助 IDE 自动完成代码和检查语法错误。

<modelVersion>4.0.0</modelVersion>,这是项目对象模型的版本。目前 Maven 2 和 Maven 3 都使用的是 4.0.0。这是一个固定值,通常不需要修改。

核心坐标

这三个标签定义了项目的唯一标识,它们是 Maven 中最重要的三个概念,被称为项目的坐标(Coordinate):

  1. com.example:

项目组 ID。它定义了项目所属的组织或项目组。通常使用组织的反向域名来命名,以确保唯一性。

  1. fist_my_maven_project:

项目 ID。它定义了项目本身的名称,通常与项目根目录的名称相同。

  1. 1.0-SNAPSHOT:

项目版本号。1.0 是主版本号。-SNAPSHOT 是一个特殊的标识符,它代表这个项目是快照版本(Snapshot Version)。这意味着它是一个正在开发中的版本,不稳定且随时可能更新。当 Maven 部署一个快照版本时,它会不断覆盖远程仓库中的旧版本,方便团队成员获取最新代码。相对地,正式版本(Release Version)没有 -SNAPSHOT 标识,例如 1.0。正式版本是稳定的、不可变的,一旦发布就不会被覆盖。

properties 标签

,这个标签用于定义一些变量。这些变量可以在 pom.xml 的其他地方被引用,类似于编程语言中的变量。这有助于集中管理配置,避免重复。

<maven.compiler.source>8</maven.compiler.source>:定义了项目的源代码编译版本。这告诉 Maven 编译器,你的 .java 文件是按照 Java 8 的语法编写的。

<maven.compiler.target>8</maven.compiler.target>:定义了编译后生成的字节码版本。这告诉 Maven 编译器,生成的 .class 文件需要兼容 Java 8 虚拟机。

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>:定义了项目的源文件编码。这确保了在不同操作系统上编译时,源代码中的中文或其他特殊字符不会出现乱码问题。

GAVP

GAVP 是 Maven 中用来唯一标识一个构件(artifact)的四个关键属性的缩写。这四个字母分别代表:GroupId、ArtifactId、Version、Packaging。

这四个元素共同构成了 Maven 构件的坐标,也叫坐标系(Coordinate System)。通过这个坐标,Maven 可以在仓库中准确地找到任何一个构件(比如一个 JAR 包、WAR 包或 POM 文件)。

  1. G - GroupId (项目组ID)

作用:定义了构件所属的项目组或组织。

格式:通常使用组织的反向域名来命名,例如 com.google.guava。

目的:确保项目组在全球范围内的唯一性。同一个 GroupId 下可以有多个项目(ArtifactId)。

  1. A - ArtifactId (项目ID)

作用:定义了项目本身的名称。

格式:通常是小写字母和连字符的组合,例如 guava。

目的:在 GroupId 范围内唯一标识一个项目。ArtifactId 的名称通常就是项目生成的可执行文件(比如 JAR 包)的名称。

  1. V - Version (版本号)

作用:定义了构件的版本。

格式:可以是任何字符串,但通常遵循某种版本号约定,例如 1.0.0、2.1-SNAPSHOT。

目的:区分不同版本的构件。

管理构件的生命周期:

  • SNAPSHOT 版本:表示“快照”,不稳定、正在开发中的版本。当发布到仓库时,Maven 会覆盖同名的快照版本。
  • RELEASE 版本:表示“发布”,稳定、不可修改的正式版本。一旦发布到仓库,就永远不会被覆盖。

Version 版本号格式推荐:版本号.次版本号.修订号,主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能;次版本号:当做了向下兼容的功能性新增(新增类、接口等);修订号:修复 bug 或没有影响的代码修改,没有修改方法签名的功能加强,保持 API 兼容性。例如: 初始→1.0.0 修改 bug → 1.0.1 功能调整 → 1.1.1等。

  1. P - Packaging (打包类型)

作用:定义了项目打包的类型,也就是最终生成的文件的扩展名。

格式:通常是以下几种类型:

  • jar:默认值,打包成 Java 库文件。
  • war:用于 Web 应用,打包成 Web 归档文件。
  • pom:如果项目只是一个聚合父项目,它本身不生成任何可执行文件。
  • maven-plugin:如果项目是一个 Maven 插件。

目的:告诉 Maven 如何处理和打包这个项目,以及最终生成什么类型的文件。

举例说明

以我们经常使用的 JUnit 测试框架为例,它的 pom.xml 中可能包含以下依赖声明:

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version><packaging>jar</packaging>
</dependency>

这个 GAVP 坐标告诉 Maven:

G: org.junit.jupiter 这个组织下的

A: junit-jupiter-api 这个项目

V: 的 5.9.1 这个版本

P: 以 .jar 的形式存在

通过这个唯一的 GAVP 坐标,Maven 就可以在全球任何一个 Maven 仓库中精确地找到并下载这个特定的 JAR 包。这就是 Maven 强大的依赖管理能力的基础。


文章转载自:

http://ffq76UCv.qbdqc.cn
http://f3pNLVTH.qbdqc.cn
http://9IWlbWQe.qbdqc.cn
http://0eCLdJSK.qbdqc.cn
http://fGzkpA3J.qbdqc.cn
http://MXNVAfx0.qbdqc.cn
http://VwG7wpu0.qbdqc.cn
http://ecRJukZA.qbdqc.cn
http://M7iXkGJg.qbdqc.cn
http://L4Yegy3u.qbdqc.cn
http://quGkzn4Y.qbdqc.cn
http://pSRqlrSX.qbdqc.cn
http://GJaLXtni.qbdqc.cn
http://ByJm9j89.qbdqc.cn
http://KJQq13c6.qbdqc.cn
http://37doM8Wg.qbdqc.cn
http://COkKQNLH.qbdqc.cn
http://o9Ho7SuL.qbdqc.cn
http://wHjR74Qp.qbdqc.cn
http://809NeSmu.qbdqc.cn
http://d3fvwK6u.qbdqc.cn
http://FpbTxgje.qbdqc.cn
http://WtgIk1Cx.qbdqc.cn
http://PqbCTpu7.qbdqc.cn
http://f1PQOBGO.qbdqc.cn
http://EFS0R4rr.qbdqc.cn
http://BchhvedO.qbdqc.cn
http://6v3QGXtl.qbdqc.cn
http://N3gjAgtk.qbdqc.cn
http://oBmzLKZo.qbdqc.cn
http://www.dtcms.com/a/372190.html

相关文章:

  • Keil快捷键代码补全
  • 2024理想算法岗笔试笔记
  • Java面试-线程安全篇
  • 线程池深度解析:ThreadPoolExecutor底层实现与CompletableFuture异步编程实战
  • 计算机网络学习(七、网络安全)
  • 蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
  • build.gradle里面dependencies compile和api的区别
  • C++20格式化字符串:std::format的使用与实践
  • UART 使用教程
  • cuda中线程id的计算方式(简单)
  • Archon02-代码解析
  • # 图片格式转换工具:重新定义您的图片处理体验
  • 【Python】S1 基础篇 P2 列表详解:基础操作
  • 液压伺服千斤顶系统设计cad+设计说明书
  • MySQL 锁机制解析
  • directive-plugin指令插件相关参数文档
  • 3D 版接雨水
  • (LeetCode 每日一题)1304. 和为零的 N 个不同整数(数组)
  • WebGL2初识
  • 浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容方案与跨浏览器调试技巧
  • TI例程demo-ADC电压、电流采样的学习研究及硬件验证调试
  • AOP常见面试题
  • Suricata 8阿里云编译安装保姆教程
  • 【112】基于51单片机大棚鸡舍远程数据检测系统【Keil程序+报告+原理图】
  • 深入理解OpenHarmony中的BUILD.gn:从语法到模块化构建
  • 阴阳学:从入门到精通
  • vulhub通关笔记1—docker unauthorized-rce
  • ZYNQ PS XADC读取芯片内部温度值,电压值。
  • 每日一题(3)
  • 泛型编程(简单介绍,通俗易懂)