maven组件介绍

写在前面

今天我们来学习一下 Maven。简单来说,Maven 是一种项目管理和构建工具,它的核心原理是通过使用插件(这些插件是由 Java 编写的 JAR 包)来实现的。

Maven 的作用

假设一个公司要开发一个项目,而这个项目又分成多个模块,每个模块又有许多业务需求,需要不同的小组进行开发和整合。这样的问题是,在快速发展的技术时代里,每个人可能使用不同版本的 JAR 包和软件版本。这种版本不一致的问题可能会导致在项目整合时出现各种问题。

Maven 如何解决这些问题

Maven 能够有效地解决这些问题,其关键在于以下几点:

  1. 中央仓库
    Maven 提供了一个中央仓库,开发者可以从这个中央仓库中获取所需的 JAR 包。此外,开发者完成的项目也可以打包成 JAR 包并发布到这个中央仓库中,供其他模块的开发人员使用。

  2. 统一版本管理
    项目经理或管理员可以使用 Maven 来统一管理所有开发所需的版本,从而最大程度上减少因版本不一致而产生的问题。Maven 的 pom.xml 文件中定义了项目所需的所有依赖及其版本,这样可以确保每个开发者都使用相同版本的库和工具。

Maven

下载

可以去国内镜像站中下载 Maven。

安装

  1. 解压缩包
    解压 Maven 压缩包到指定目录。

  2. 环境变量配置

    • 新建一个 MAVEN_HOME 环境变量,指向 Maven 解压目录。
    • MAVEN_HOME/bin 目录添加到 PATH 环境变量中。
  3. 验证安装
    在命令行中使用 mvn -v 来查询 Maven 的版本,验证是否安装成功。

    参考网站:Maven Repository

基本使用

项目构建

  • 目录结构

    src                  # 书写 Java 源代码
    ├── main              # 书写 Java 主程序代码
    │   ├── java          # 书写 Java 代码
    │   └── resources    # 书写配置文件代码
    └── test              # 书写测试代码
        ├── java          # 书写测试 Java 代码
        └── resources    # 书写测试配置文件代码
    pom.xml               # 配置文件
    target                # 编译后目录结构
    
  • 相关操作

    项目构建是一个过程,由以下步骤组成。项目创建是瞬间完成的。

    1. 清理mvn clean
    2. 编译mvn compile
    3. 测试mvn test
    4. 报告mvn site
    5. 打包mvn package
    6. 安装mvn install
    7. 部署mvn deploy
  • 生命周期

    Maven 的生命周期按照顺序执行各个命令,包含以下三个部分:

    1. Clean LifeCycle:在进行真正的构建之前进行一些清理工作。
    2. Default LifeCycle:构建的核心部分,包括编译、测试、打包、安装、部署等。
    3. Site LifeCycle:生成项目报告、站点及发布站点。

基本设置

pom.xml 配置

  • 坐标

    Maven 使用坐标来唯一标识一个项目的模块:

    1. groupId:公司或组织的域名倒序 + 当前项目名称
    2. artifactId:当前项目的模块名称
    3. version:当前模块的版本
    <groupId>com.shujia</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0</version>
    
  • 设置父工程坐标

    <parent>
        <artifactId>maven-demo</artifactId>
        <groupId>com.shujia</groupId>
        <version>1.0</version>
    </parent>
    
  • 设置依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  • 依赖的范围

    依赖的语法:

    • compile(默认值):在 maintest、Tomcat 服务器下均有效。
    • test:仅在 test 目录下有效。
    • provided:在 maintest 下有效,Tomcat 服务器无效。

注意事项

  1. 在一个大型 Maven 项目中,多个子模块会继承父模块的依赖。如果父模块中有多个不同版本的同一依赖,则使用最后声明的版本。如果子模块中声明了不同版本的依赖,则以子模块的版本为准。

  2. 如果子模块需要引入其他子模块的依赖,可以直接在 dependency 中添加相关坐标。如果引入其他子模块的依赖,导入的依赖会遵循声明顺序,即前面的模块优先。

  3. 如果想要控制父模块的所有依赖不直接传递给子模块,可以使用 dependencyManagement 来管理,子模块需要明确声明父模块的依赖才能使用。

  4. 对于版本号相同的依赖,可以在 properties 中定义参数,例如 <hadoop.version>3.1</hadoop.version>,使用 ${hadoop.version} 替代版本号,以便统一管理版本号。

Maven 示意图

在 IDEA 中配置 Maven

  1. 创建 Maven 项目
    在 IntelliJ IDEA 中创建一个 Maven 项目。在设置中配置 Maven 的安装目录、依赖包存放位置和 conf 中的 settings.xml 文件。IDEA 会自动创建并下载必要的依赖包。

  2. 配置完成
    配置完成后,IDEA 会出现 pom.xml 文件和 Maven 工具栏,可以继续进行相关配置并正常使用 Maven。