当前位置: 首页 > article >正文

【Maven】Maven的classpath

1、概念

Maven 的 classpath 是指在构建和运行项目时,Java 编译器和运行时环境用来查找类文件和其他资源的路径集合。Maven 通过其依赖管理和构建生命周期来自动管理 classpath,确保所有必要的库和资源都被正确包含。

2、Maven Classpath 的分类

Maven 有三套 classpath,编译 classpath、测试 classpath 和运行 classpath,实质就是不同作用域的依赖在编译、测试或运行时是否会发挥作用。

  • 编译 classpath:能否让项目顺利通过编译不报错
  • 测试 classpath:在测试时依赖能否被引用
  • 运行 classpath:依赖是否会被打包进项目

3、Maven Classpath 的组成

Maven 的 classpath 主要由以下几个部分组成:

(1) 项目自身的源代码:

  • src/main/java:包含应用程序的主要Java源代码。
  • src/test/java:包含测试代码。

(2) 项目自身的资源文件:

  • src/main/resources:包含应用程序的主要资源文件(如配置文件、静态资源等)。
  • src/test/resources:包含测试所需的资源文件。

(3) 依赖项:

  • Maven 会根据 pom.xml 中定义的依赖关系,从本地仓库、中央仓库或自定义远程仓库中下载并添加到 classpath 中。

(4) 插件提供的类和资源:

  • 某些 Maven 插件可能会提供额外的类或资源,这些也会被添加到 classpath 中。

(5) 编译输出目录:

  • target/classes:存放编译后的主代码和资源文件。
  • target/test-classes:存放编译后的测试代码和资源文件。

4、Maven 如何管理 Classpath

Maven 使用一种称为“依赖解析”的机制来确定哪些依赖应该被包含在 classpath 中,并且根据不同的构建阶段(如编译、测试、打包等)动态调整 classpath 内容。

在这里插入图片描述

例如,在编译时,Maven 会到 src/main/java 目录下寻找 Java 源码,并寻找在 pom 文件中 scope 为 compile 的依赖项,然后执行编译。

思考:Maven 生命周期的不同的阶段(phase)分别使用哪种 classpath?

Maven 的构建生命周期由一系列的阶段(phases)组成,每个阶段对应着特定的任务。Maven 根据当前所处的构建阶段动态调整 classpath,以确保每个阶段都能访问到所需的类和资源。以下是 Maven 构建生命周期中一些关键阶段及其对应的 classpath 类型:

(1) validate

  • Classpath:基本不需要额外的 classpath,主要用于验证项目配置是否正确。
  • 说明:这个阶段通常不涉及编译或运行代码,所以不会使用特定的 classpath。

(2) compile

  • Classpath:
    • 包括 src/main/java 和 src/main/resources。
    • 包括所有标记为 compile 范围的依赖项。
  • 说明:在这个阶段,Maven 编译项目的主源代码,并将编译后的类文件输出到 target/classes 目录下。

(3) test-compile

  • Classpath:
    • 包括 src/test/java 和 src/test/resources。
    • 包括所有标记为 compile 和 test 范围的依赖项。
  • 说明:编译测试代码,并将编译后的类文件输出到 target/test-classes 目录下。

(4) test

  • Classpath:
    • 包括 target/classes 和 target/test-classes。
    • 包括所有标记为 compile 和 test 范围的依赖项。
  • 说明:执行单元测试,确保代码质量。测试框架(如 JUnit 或 TestNG)会根据此 classpath 加载必要的类和资源。

(5) package

  • Classpath:
    • 主要基于 target/classes 中的内容。
    • 包括所有标记为 compile 和 runtime 范围的依赖项(具体取决于打包类型)。
  • 说明:创建可分发的包(如 JAR、WAR),并将其放置在 target 目录中。对于某些打包类型(如 WAR),还会包括 WEB-INF/lib 下的依赖。

(6) integration-test

  • Classpath:
    • 包括 target/classes 和 target/test-classes。
    • 包括所有标记为 compile、test 和 runtime 范围的依赖项。
  • 说明:部署打包好的应用程序到集成测试环境中,并执行集成测试。这通常涉及到更复杂的环境设置,例如启动应用服务器等。

(7) verify

  • Classpath:
    • 与 test 阶段类似,但可能包含更多运行时依赖。
  • 说明:运行任何检查工具来验证集成测试的结果,确保满足发布标准。

(8) install

  • Classpath:
    • 主要用于将打包好的工件安装到本地仓库。
  • 说明:这个阶段通常不需要特别的 classpath,因为它主要是为了更新本地仓库中的元数据

(9) deploy

  • Classpath:
    • 用于将打包好的工件部署到远程仓库。
  • 说明:类似于 install,但它将工件上传到一个或多个远程仓库,以便其他项目可以引用它们。

http://www.kler.cn/a/450698.html

相关文章:

  • RGCL:A Review-aware Graph Contrastive Learning Framework for Recommendation
  • 【项目实战】NGINX 实现会话保持
  • 关于卡尔曼滤波
  • 性能优化!突破性能瓶颈的尖兵CPU Cache
  • 取多个集合的交集
  • 0009.基于springboot+layui的ERP企业进销存管理系统
  • 中国量子计算机领域的发展现状与展望
  • 【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
  • VMware下Net网络的配置
  • java数组常用操作(其三)
  • 从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略
  • 期权懂|如何减小个股期权交易中的风险?
  • kkfileview代理配置,Vue对接kkfileview实现图片word、excel、pdf预览
  • 网络安全等级保护测评工作流程
  • 【最后203篇系列】002 - 两个小坑(容器时间错误和kafka模块报错
  • [Unity Shader]【图形渲染】 数学基础10 - 旋转矩阵
  • [实战]Docker应用自动重启
  • Opencv实现图片和视频的加噪、平滑处理
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战项目二)
  • RTOS下的任务管理
  • 分体空调智能控制系统
  • leetcode79:单词搜索
  • http的访问过程或者访问页面会发生什么
  • 【国产NI替代】基于FPGA的4通道电压 250M采样终端边缘计算采集板卡,主控支持龙芯/飞腾
  • C# OpenCV机器视觉:缺陷检测
  • Web前端基础知识(一)