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

项目的目录结构

plain 复制代码
.
├── src/                          # 项目源代码和资源根目录
│   ├── main/                     # 项目主代码和资源
│   │   ├── java/                 # 存放所有 Java 源代码
│   │   │   └── com/              # 对应 groupId 的第一个部分
│   │   │       └── example/      # 对应 groupId 的第二个部分
│   │   │           └── Main.java # 你的主类文件
│   │   └── resources/            # 存放非 Java 源代码的资源文件
│   └── test/                     # 存放测试代码和资源
│       ├── java/                 # 存放所有测试 Java 代码
│       └── resources/            # 存放测试用到的资源文件
├── .gitignore                    # Git 版本控制忽略文件
└── pom.xml                       # Maven 项目对象模型配置文件

pom.xml

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 中可能包含以下依赖声明:

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

相关推荐
陈小桔4 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
自由会客室11 小时前
Ubuntu 24.04 上安装 Sonatype Nexus Repository(Maven 私服)
架构·maven
哞哞不熬夜15 小时前
JavaEE--SpringIoC
java·开发语言·spring boot·spring·java-ee·maven
TT哇15 小时前
【Maven】Maven设置国内源
java·maven
编啊编程啊程1 天前
【011】宠物共享平台
spring boot·log4j·maven·dubbo·宠物
少妇的美梦2 天前
Maven Profile 教程
后端·maven
天庭鸡腿哥2 天前
可能最后一个版本,作者不更新了!
eclipse·maven·lua·visual studio
Xzh04232 天前
前后端学习的交界
java·ajax·maven·axios·测试
寒山李白3 天前
关于Java项目构建/配置工具方式(Gradle-Groovy、Gradle-Kotlin、Maven)的区别于选择
java·kotlin·gradle·maven
譕痕3 天前
Idea 启动报 未找到有效的 Maven 安装问题
java·maven·intellij-idea