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

发布于:2025-09-08 ⋅ 阅读:(18) ⋅ 点赞:(0)

项目的目录结构

.
├── 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 强大的依赖管理能力的基础。


网站公告

今日签到

点亮在社区的每一天
去签到