ZetCode

Java Maven

最后修改于 2025 年 6 月 9 日

在本文中,我们将展示如何在 Java 项目中使用 Maven 进行构建自动化和依赖管理。

什么是 Maven?

Maven 是一个强大的构建自动化和项目管理工具,主要用于 Java 项目。它通过提供标准的目录布局、依赖管理和一套全面的插件来简化构建过程,以应对各种任务。

Maven 采用声明式方法,您在此方法中描述您的项目是什么以及它需要什么,而不是如何构建它。这是通过一个名为 pom.xml (Project Object Model) 的 XML 文件完成的,该文件包含项目信息和配置详细信息。

Maven 的主要优点包括自动化的依赖管理、标准化的项目结构、与 IDE 的集成以及用于测试、打包和部署的广泛插件生态系统。

安装与设置

在安装 Maven 之前,请确保您的系统上已安装 Java Development Kit (JDK) 8 或更高版本。Maven 需要 Java 才能运行。

安装 Maven

在 Windows 上

  1. https://maven.apache.org/download.cgi 下载 Maven
  2. 将归档文件提取到类似 C:\Program Files\Apache\maven 的目录中
  3. bin 目录添加到您的 PATH 环境变量
  4. M2_HOME 环境变量设置为 Maven 安装目录

在 macOS 上

$ brew install maven

在 Ubuntu/Debian 上

$ sudo apt update
$ sudo apt install maven

验证安装

安装后,验证 Maven 是否正常工作

$ mvn --version
Apache Maven 3.9.6
Maven home: /usr/share/maven
Java version: 21.0.1, vendor: Eclipse Adoptium

基本概念

要有效地使用 Maven,理解这些核心概念至关重要。

项目对象模型 (POM)

pom.xml 文件是任何 Maven 项目的核心。它包含项目信息、依赖项、构建配置和插件定义。每个 Maven 项目在其根目录中都必须有一个 POM 文件。

坐标

Maven 使用坐标来唯一标识项目和依赖项。坐标包括:

标准目录布局

Maven 遵循标准目录结构,以促进项目之间的一致性

my-project/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/          # Application source code
│   │   └── resources/     # Application resources
│   └── test/
│       ├── java/          # Test source code
│       └── resources/     # Test resources
└── target/                # Compiled output (generated)

构建生命周期

Maven 有三个内置生命周期:defaultcleansite。默认生命周期包括 compile、test、package 和 install 等阶段。

您的第一个 Maven 项目

让我们使用 archetype 插件创建一个简单的 Maven 项目,该插件可以生成项目模板。

创建项目

使用以下命令创建新 Maven 项目

$ mvn archetype:generate -DgroupId=com.example.myapp \
  -DartifactId=my-first-maven-project \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false

此命令创建一个具有项目结构和基本 pom.xml 文件的新目录。

项目结构

运行命令后,您将看到以下结构

my-first-maven-project/
├── pom.xml
└── src/
    ├── main/
    │   └── java/
    │       └── com/
    │           └── example/
    │               └── myapp/
    │                   └── App.java
    └── test/
        └── java/
            └── com/
                └── example/
                    └── myapp/
                        └── AppTest.java

构建项目

导航到项目目录并进行构建

$ cd my-first-maven-project
$ mvn compile

运行测试并打包应用程序

$ mvn package

这会在 target 目录中创建一个 JAR 文件。

运行应用程序

执行生成的 JAR 文件

$ java -cp target/my-first-maven-project-1.0-SNAPSHOT.jar com.example.myapp.App
Hello World!

应用程序将 "Hello World!" 打印到控制台,表明您的 Maven 项目已成功设置并运行。-cp (选项代表 "classpath") 选项指定了运行应用程序的 JAR 文件的位置。com.example.myapp.App 是包含 main 方法的主类。

理解 POM

项目对象模型 (POM) 是 Maven 的基本单元。让我们检查一个基本的 pom.xml 文件的结构。

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.myapp</groupId>
    <artifactId>my-first-maven-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>my-first-maven-project</name>
    <url>http://www.example.com</url>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

pom.xml 文件定义了一个简单的 Maven 项目,其中包含以下关键元素:

关键 POM 元素

让我们分解 pom.xml 文件的关键元素:

<modelVersion>4.0.0</modelVersion>

指定 POM 模型版本。当前,版本 4.0.0 是 Maven 2 和 3 的唯一受支持版本。

<groupId>com.example.myapp</groupId>
<artifactId>my-first-maven-project</artifactId>
<version>1.0-SNAPSHOT</version>

这三个元素构成了项目坐标,在 Maven 生态系统中唯一地标识您的项目。

<packaging>jar</packaging>

定义打包类型。常见的值包括 jarwarearpom

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

Properties 部分允许您定义可在整个 POM 中重用的值。在这里,我们为编译指定了 Java 版本 11。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Dependencies 部分列出了项目所需的外部库。scope 元素定义了依赖项的可用时间。Test 范围意味着它仅在测试期间可用。

常用 Maven 命令

以下是日常开发中必不可少的 Maven 命令:

$ mvn clean          # Clean previous builds
$ mvn compile        # Compile source code
$ mvn test           # Run tests
$ mvn package        # Create JAR/WAR file
$ mvn install        # Install to local repository
$ mvn dependency:tree # Show dependency tree

这些命令可以帮助您有效地管理项目生命周期。clean 命令删除 target 目录,该目录包含前几次构建的编译代码和构件。compile 命令编译源代码,test 命令运行单元测试,package 命令在 target 目录中创建 JAR 或 WAR 文件。

install 命令将构建的构件安装到您的本地 Maven 存储库中,使其可供其他项目使用。dependency:tree 命令显示项目的依赖项树,帮助您理解依赖项之间的关系。

来源

Maven 官方文档

在本文中,我们展示了如何在 Java 项目中使用 Maven 进行构建自动化和依赖管理。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有Java教程