【Maven】Maven 使用概念

Maven 是 Java 项目的一个强大的项目管理和构建自动化工具。它基于项目对象模型(POM,Project Object Model)的概念,允许开发者通过一个中央配置文件(通常是 pom.xml 文件)来管理项目的构建、报告和文档。以下是 Maven 使用中的一些基本概念:

1、POM (Project Object Model)

1.1简介

  • 是 Maven 的核心,是一个 XML 文件(通常是 pom.xml),它包含了项目的基本信息、配置、依赖关系等。
  • POM 是 Maven 用来识别和管理项目的关键。

1.2主要元素

  • modelVersion:POM文件的版本,通常是4.0.0。
  • groupId:项目的组织或组的唯一标识符。
  • artifactId:项目的唯一标识符,通常是项目的名称。
  • version:项目的版本号。
  • packaging:项目的打包方式,如jar、war等。
  • name和description:项目的名称和描述(可选)。
  • dependencies:项目依赖的列表,每个依赖项都包含groupId、artifactId、version和scope等元素。
  • build:构建配置,包括插件列表和插件配置等。
  • 其他可选元素,如属性、资源过滤、开发者信息、邮件列表、URL、许可证、组织、SCM等。

1.3代码示例

<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>my-project</artifactId>  
    <version>1.0-SNAPSHOT</version>  
    <packaging>jar</packaging>  
  
    <!-- 项目名称和描述(可选) -->  
    <name>My Project</name>  
    <description>A simple Maven project</description>  
  
    <!-- 项目依赖 -->  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.12</version>  
            <scope>test</scope>  
        </dependency>  
        <!-- 其他依赖项... -->  
    </dependencies>  
  
    <!-- 插件配置(可选) -->  
    <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>  
  
    <!-- 其他配置,如属性、资源过滤等(可选) -->  
    <!-- ... -->  
  
    <!-- 项目开发者和贡献者(可选) -->  
    <!-- ... -->  
  
    <!-- 邮件列表和URL(可选) -->  
    <!-- ... -->  
  
    <!-- 其他元素,如许可证、组织、SCM等(可选) -->  
    <!-- ... -->  
</project>

2、坐标

2.1简介

  • Maven 使用 GAV(GroupId, ArtifactId, Version)坐标来唯一标识一个项目或依赖。
  • 由GroupId、ArtifactId、Version三个元素组成

2.2组成元素

groupId:

  • 描述了一个项目的组织或组的唯一标识符。这通常是一个反向的域名,如com.example。
  • 它有助于区分具有相同artifactId但来自不同组织的项目。

artifactId:

  • 是项目的唯一标识符,通常是项目的名称或模块的名称。
  • 在groupId的上下文中,artifactId必须是唯一的。
  • 例如,一个名为“spring-core”的artifact,表示Spring框架的核心模块。

version:

  • 定义了artifact的版本号。
  • 对于一个给定的groupId和artifactId,可能存在多个版本。
  • Maven在解析依赖时会根据指定的version来查找具体的artifact。

2.3代码示例

<dependencies>  
    <dependency>  
        <groupId>com.example</groupId>  
        <artifactId>my-library</artifactId>  
        <version>1.0.0</version>  
        <!-- Optional classifier element  
        <classifier>sources</classifier>  
        -->  
    </dependency>  
    <!-- Other dependencies... -->  
</dependencies>

3、依赖管理

3.1简介

  • Maven 可以自动处理项目的依赖关系,只需在 POM 文件中声明所需的依赖项和它们的版本。
  • Maven 会从中央仓库(或其他配置的仓库)下载这些依赖项,并将其添加到项目的构建路径中。

3.2依赖范围

Maven支持不同的依赖范围,这些范围决定了依赖在项目的哪些阶段(如编译、测试、运行)可用。常用的依赖范围包括:

  • compile:默认的依赖范围,依赖在编译、测试和运行时均可用。
  • test:仅在测试阶段可用,不会包含在最终的构建产物中。
  • runtime:在编译时不需要,但在运行时需要的依赖。
  • provided:预期JDK、容器或使用者会提供的依赖,在编译和测试时需要,但在运行时不需要。
  • system:与provided类似,但是系统范围依赖项必须显式地提供包含它的JAR。

3.3本地依赖和远程依赖

  • 本地依赖:项目所依赖的资源存储在本地开发环境中,通常是通过将JAR文件手动放置在项目的lib目录或Maven的本地仓库中来实现的。
  • 远程依赖:项目依赖的资源需要从中央仓库或自定义仓库中下载,并缓存在本地仓库中供项目使用。Maven会首先在中央仓库中查找对应的依赖,并下载到本地仓库中。

4、生命周期

4.1简介

Maven 有一个定义好的项目构建生命周期,包括验证、编译、测试、打包、安装、部署等阶段。
每个阶段都有一组预定义的插件目标(goal)与之关联,这些目标可以执行特定的任务。这些步骤被组织成三套相互独立的生命周期:clean、default和site。

4.1clean生命周期

  • 主要目的是清理项目。
  • 包含三个阶段:
    • pre-clean:执行清理前需要完成的工作。
    • clean:清理上一次构建生成的文件。
    • post-clean:执行清理后需要完成的工作。

4.2default生命周期

  • 这是Maven的主要构建生命周期,用于构建项目。
  • 包含多个阶段,如validate、compile、test、package、install、deploy等,每个阶段都有特定的目的和任务。
  • 这些阶段是有顺序的,后面的阶段依赖于前面的阶段。

4.3site生命周期

  • 主要用于生成项目的站点文档。
  • 包含的阶段如site、site-deploy等,用于生成和发布项目文档。

5、插件

5.1简介

  • Maven 插件用于扩展 Maven 的核心功能。
  • 插件可以执行各种任务,如编译 Java 代码、运行测试、打包项目等。
  • 插件目标(goal)是插件提供的具体任务。

5.2常用插件

  • maven-compiler-plugin:用于编译Java代码。可以配置源代码和目标字节码的版本。
  • maven-jar-plugin:用于将编译后的Java代码打包成JAR文件。可以配置JAR文件的名称、目录等选项。
  • maven-dependency-plugin:用于管理项目的依赖项。可以执行复制、分析和解决依赖冲突等任务。
  • maven-resources-plugin:用于处理项目的资源文件,如配置文件、图片等。可以配置资源文件的目录和过滤规则等选项。
  • spring-boot-maven-plugin:Spring Boot项目的默认打包工具。可以打包项目并生成可执行的JAR或WAR文件。

6、仓库

6.1简介

  • Maven 使用仓库来存储项目的依赖和其他构建工件。
  • 中央仓库(Central Repository)是 Maven 的默认仓库,包含了大量常用的 Java 库。
  • 开发者还可以配置其他仓库,如私有仓库、企业仓库等。

6.2仓库类型

6.2.1本地仓库

  • 本地仓库是存储在本地磁盘上的仓库,它是默认的仓库类型。当Maven在执行构建时,会首先在本地仓库中查找所需的依赖项和插件。如果本地仓库中没有所需的依赖项,Maven会从远程仓库中下载。

6.2.2远程仓库

  • 中央仓库:中央仓库是由Maven团队维护的远程仓库,它包含了世界上大部分流行的开源项目的构件。中央仓库包含了大量的常用依赖项和插件,因此它是最常用的远程仓库之一。
  • 私服仓库:私服仓库是一种特殊的远程仓库,通常由公司内部维护。它可以用于存储公司内部开发或使用的库,或者代理外部的公共仓库。
  • 其他公共远程仓库:除了中央仓库和私服仓库之外,还有一些其他的公共远程仓库,例如JFrog Artifactory、Nexus等。

6.3仓库作用

  • 依赖管理:通过仓库,Maven可以方便地获取项目所需的依赖项和插件,避免了手动下载和管理的繁琐过程。
  • 版本控制:Maven仓库可以存储不同版本的依赖项和插件,通过指定版本号,Maven可以获取特定版本的依赖项和插件,从而确保项目的稳定性和可维护性。
  • 团队协作:在团队开发中,多个开发者可以共享同一个仓库,从而方便地共享代码、依赖项和插件。

7、构建配置

  • 除了 POM 文件外,Maven 还允许开发者通过其他文件(如 settings.xml)来配置构建环境。
  • 这些配置可以包括仓库位置、代理设置、认证信息等。

8、多模块项目

  • Maven 支持多模块项目,即一个项目可以包含多个子模块。
  • 每个子模块都有自己的 POM 文件,但它们共享一些共同的配置和依赖关系。

9、继承与聚合

  • Maven 的 POM 继承允许子模块继承父模块的 POM 配置。
  • 聚合则允许一个父 POM 聚合多个子模块的构建,从而可以一次性构建整个项目。

10、属性与资源过滤

  • Maven 支持在 POM 文件中定义属性,并在项目的其他部分(如构建脚本、配置文件等)中使用这些属性。
  • 资源过滤允许 Maven 在复制资源文件到输出目录之前,对文件中的占位符进行替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值