【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 内容。
https://i-blog.csdnimg.cn/direct/da43f2dc7b5741c9a2026574fdf1b20e.png
比方,在编译时,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,但它将工件上传到一个或多个远程仓库,以便其他项目可以引用它们。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]