深入理解 Maven 依赖范围

在 Maven 项目中,依赖范围(Dependency Scopes)用于指定依赖项的可见性及其生命周期。Maven 为我们提供了六种不同的依赖范围。下面我们将结合 pom.xml 文件,逐一为您解释这些范围的具体用法。

  • Compile Scope(编译范围)
  • Provided Scope(已提供范围)
  • Runtime Scope(运行时范围)
  • Test Scope(测试范围)
  • System Scope(系统范围)
  • Import Scope(导入范围)

Compile Scope(编译范围)

这是 Maven 中的默认范围。具有此范围的依赖项在所有类路径(如编译、测试和运行时)中均可用,并且会被打包到最终的构建产物(如 JAR、 WAR 等)中。

示例:


    
        org.apache.commons
        commons-lang3
        3.12.0
    

Provided Scope(已提供范围)

具有此范围的依赖项在编译项目代码时是必需的,但我们预期由运行时环境(如 JDK 或 Web 容器)来提供它们。因此,这些依赖项不会被包含在最终的构建产物中。

示例:


    
        javax.servlet
        javax.servlet-api
        4.0.1
        provided
    

Runtime Scope(运行时范围)

具有此范围的依赖项仅在执行源代码时需要,而在编译代码时则不需要。这些依赖项不会包含在编译类路径中,但会包含在运行时类路径中,并且也会被打包到最终的构建产物里。

示例:


    
        org.postgresql
        postgresql
        42.2.24
        runtime
    

Test Scope(测试范围)

具有此范围的依赖项仅在编译和运行测试代码时需要,对于正式的生产代码是不需要的。


    
        junit
        junit
        4.13.2
        test
    

System Scope(系统范围)

具有此范围的依赖项不会从 Maven 仓库中获取,而是引用本地系统中的文件。通常我们不推荐使用此范围,因为它绕过了 Maven 的依赖管理机制,可能导致项目的可移植性降低。

示例:


    
        com.example
        custom-jar
        1.0
        system
        ${project.basedir}/lib/custom-jar.jar
    

Import Scope(导入范围)

此范围仅适用于 Maven 2.0.9 及更高版本。它通常用在 pom 文件的 dependencyManagement 部分,允许您将其他 POM 文件中的依赖管理配置导入到当前项目中。

示例:



    
        
            org.springframework
            spring-core
            5.3.9
        
        
            org.springframework
            spring-web
            5.3.9
        
    

工具与技术

  • Java 编程语言
  • Maven 构建工具
  • Spring Tool Suite (STS)
  • 命令行提示符

> 注意: 在阅读本文之前,建议您最好先了解 Maven 项目的创建方式及其构建生命周期,这样才能正确理解本文所述的概念。此外,您的本地系统中必须已经安装了 Maven。

Maven 依赖范围示例

在这里,我们创建了一个简单的 Maven 项目,并编写了所需的源代码。之后,我们将在这个创建好的 Maven 项目上运行上述命令。

依赖配置:


    
    
        org.apache.commons
        commons-lang3
        3.12.0
    
    
    
    
        javax.servlet
        javax.servlet-api
        4.0.1
        provided
    
    
    
    
        org.postgresql
        postgresql
        42.2.24
        runtime
    
    
    
    
        junit
        junit
        4.13.2
        test
    
    
    
    
        com.example
        custom-jar
        1.0
        system
        ${project.basedir}/lib/custom-jar.jar
    

项目文件夹结构:

![Project Folder Structure](h

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/20338.html
点赞
0.00 平均评分 (0% 分数) - 0