返回
Featured image of post Maven入门与介绍

Maven入门与介绍

包含Maven核心概念,标签,生命周期

🐣 Maven 是什么

Maven是一个项目管理和自动化构建工具,它基于项目对象模型(POM,Project Object Model)的概念。Maven可以帮助开发者更好地构建和管理任何基于Java的项目。它使用一个中央信息库来存储项目的构建信息、依赖关系等。

🐤 Maven 的核心概念

  • POM(Project Object Model): POM是Maven项目的基本工作单元。它包含了项目的基本信息,比如项目名称、版本、依赖项、插件等。
  • 依赖管理: Maven允许你指定项目依赖的外部库,自动从中央仓库下载这些依赖。
  • 约定优于配置: Maven使用一个标准的目录布局和默认的构建生命周期,这意味着如果你遵循这些约定,你可以用最少的配置完成项目构建。
  • 生命周期和插件: Maven的构建过程分为几个阶段(如编译、测试、打包等),每个阶段都可以绑定具体的任务,这些任务是通过插件来实现的。

🐥 Maven 标签

基础项目信息

  • <modelVersion>: 定义了POM模型的版本(通常是4.0.0)。

    1
    
    <modelVersion>4.0.0</modelVersion>
    
  • <groupId>: 定义了项目的组ID,通常表示项目所属的组织或者公司。

    1
    
    <groupId>com.example</groupId>
    
  • <artifactId>: 定义了项目的ID,这是项目的名称。

    1
    
    <artifactId>my-application</artifactId>
    
  • <version>: 定义了项目的版本。

    1
    
    <version>1.0-SNAPSHOT</version>
    
  • <packaging>: 定义了项目的打包方式,如jarwar等。

    1
    
    <packaging>jar</packaging>
    

依赖关系

  • <dependencies>: 包含项目所需的所有依赖。

    1
    2
    3
    4
    5
    6
    7
    8
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

构建配置

  • <build>: 包含构建的配置信息,如源代码目录、目标目录、插件等。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

插件

  • <plugins>: 定义了项目构建过程中使用的插件。

    1
    2
    3
    4
    5
    6
    7
    
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>
    </plugins>
    

项目属性

  • <properties>: 定义了一些项目的属性,可以在POM中重用。

    1
    2
    3
    
    <properties>
        <java.version>1.8</java.version>
    </properties>
    

分发管理

  • <distributionManagement>: 定义了项目分发的配置,如部署到Maven仓库的信息。

    1
    2
    3
    4
    5
    6
    7
    
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>http://path/to/your/repo</url>
        </repository>
    </distributionManagement>
    

仓库

  • <repositories>: 定义项目所使用的其他仓库的位置。

    1
    2
    3
    4
    5
    6
    
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>
    

配置文件管理

  • <profiles>: 定义了一组不同的配置,可以根据不同的环境选择性地激活。

    1
    2
    3
    4
    5
    6
    7
    8
    
    <profiles>
        <profile>
            <id>development</id>
            <properties>
                <environment>development</environment>
            </properties>
        </profile>
    </profiles>
    

这些标签构成了Maven pom.xml文件的基本框架,允许你配置项目的构建、依赖、插件等方面的细节。通过组合这些标签,你可以灵活地管理和构建你的Java项目。

🐦 Maven 的生命周期

Maven 使用一种称为构建生命周期的概念来管理项目构建过程。每个生命周期由一系列阶段(phase)组成,这些阶段在执行时按照特定的顺序进行。Maven 主要有三个标准的构建生命周期:cleandefault(或称为build)和site。这些生命周期覆盖了项目的清理、构建和文档生成等方面。

1 Clean 生命周期

Clean 生命周期的目的是清理项目,删除之前构建生成的所有文件。它主要包含以下三个阶段:

  • pre-clean:执行清理前的工作。
  • clean:清理上一次构建生成的所有文件。
  • post-clean:执行清理后的工作,如完成清理后的一些资源释放等。

2 Default 生命周期

Default 生命周期是Maven最核心的部分,负责项目的构建和部署。它包含了多个阶段,主要阶段如下:

  • validate:验证项目是否正确,所有必要信息是否可用。
  • compile:编译项目的源代码。
  • test:使用适当的单元测试框架运行测试,这些测试不需要打包或部署。
  • package:打包编译后的代码,通常是创建JAR或WAR文件。
  • verify:对集成测试的结果进行检查,以确保质量达标。
  • install:将包安装到Maven本地仓库,供本地其他项目使用。
  • deploy:在构建环境中完成的最后一个阶段,将最终的包复制到远程仓库供其他开发人员和Maven项目使用。

3 Site 生命周期

Site 生命周期负责创建和发布项目的站点文档。它包括以下阶段:

  • pre-site:执行生成项目站点前的工作。
  • site:生成项目的站点文档。
  • post-site:执行生成站点后的工作,如部署站点到服务器。
  • site-deploy:将生成的站点文档部署到特定的服务器上。

🐔 dependencies 和 dependencyManagement

在Maven项目中,<dependencies><dependencyManagement>是用来管理项目依赖的两个重要元素。它们的作用和使用场景有所不同

<dependencies>

<dependencies>元素用于明确声明项目直接依赖的外部库。当你在项目中需要使用某个库时,就在<dependencies>中添加一个<dependency>项。每个<dependency>项都会指定依赖的groupIdartifactIdversion等信息。

<dependencyManagement>

<dependencyManagement>元素用于在父POM中统一管理项目的依赖版本,而不是直接引入依赖。在<dependencyManagement>内部声明的依赖不会直接加入到项目中,只有当子模块中声明了相同的groupIdartifactId时,<dependencyManagement>中指定的版本和范围(scope)等才会生效。这使得在多模块项目中能够很方便地统一管理依赖版本,避免了版本冲突和依赖的重复声明。

  • 在父POM中使用<dependencyManagement>管理多模块项目的依赖版本:子模块需要这个依赖时,应该在子模块的pom.xml中的<dependencies>部分声明这个依赖,这样才能真正引入到子模块中。
  • 在单个模块项目中或父模块自身需要使用某个依赖:除了在<dependencyManagement>中指定版本信息外,还需要在<dependencies>中声明这个依赖,才能将其引入项目中。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <!-- 这里不需要指定版本,因为已经在<dependencyManagement>中指定 -->
    </dependency>
</dependencies>

🪶 附录

Maven 官方文档

Licensed under CC BY-ND