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

相关推荐
计算机毕设指导639 分钟前
基于微信小程序的智慧社区娱乐服务管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·娱乐
阿杰AJie20 小时前
maven打包方法
maven
阿杰AJie20 小时前
Spring Boot 项目可执行 jar 的完整 Maven 打包示例
maven
Knight_AL21 小时前
Maven <dependencyManagement>:如何在多模块项目中集中管理依赖版本
java·数据库·maven
while(1){yan}1 天前
计算器和登录界面(实现前后端互通)
spring boot·spring·servlet·java-ee·tomcat·maven
hopsky1 天前
mvn install 需要 手动清除 pom.lastUpdated
java·maven·mavbne
我待_JAVA_如初恋1 天前
解决:IDEA中右侧的Maven视图中多了Profiles这一项。并且Profiles下的JDK版本与实际使用版本不一致
java·maven·intellij-idea
计算机毕设指导62 天前
基于Spring Boot的防诈骗管理系统【源码文末联系】
java·spring boot·后端·spring·tomcat·maven·intellij-idea
絔宝2 天前
在eclipse中创建Maven项目-用于学习Selenium 自动化测试
学习·selenium·eclipse·maven
葵花楹2 天前
Maven 核心能力拆解 + 实战: Java 邮件群发
java·maven