【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承

这篇具有很好参考价值的文章主要介绍了【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

依赖范围

  在Maven中,依赖范围(Dependency Scope)用于控制依赖项在编译、测试和运行时的可见性和可用性。通过指定适当的依赖范围,可以在不同的构建和执行环境中控制依赖项的加载和使用。

  compile(默认):该依赖项在编译、测试和运行时都可用。这是大多数依赖项的默认范围。
  test:该依赖项只在测试编译和测试运行期间可用,不会被导入到最终的构件中。
  provided:该依赖项由 JDK 或容器(如 Tomcat)提供,编译和测试时可用,但在打包构建产物时不会包含它。需要确保在目标环境中该依赖项可以被提供。
  runtime:该依赖项在编译时不可用,但在运行时和测试时可用。例如,JDBC 驱动程序通常以此范围进行声明,因为编译时并不需要 JDBC 驱动程序,但在运行时需要它来连接数据库。

  以下示例演示了如何指定依赖范围:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-library</artifactId>
        <version>1.0.0</version>
        <scope>runtime</scope>
    </dependency>
    
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

依赖传递

  在Maven中,依赖传递(Dependency Transitivity)是指当一个项目依赖于其他项目时,它会自动获取这些依赖项所依赖的其他项目。

  依赖传递是Maven的重要特性之一,它使得在项目中声明的依赖项可以自动解析和下载其所依赖的其他库,并将其包含在项目构建中。

  例如,如果项目 A 依赖于项目 B,而项目 B 又依赖于项目 C,那么在Maven构建过程中,项目 A 将自动获取项目 B 和项目 C 的依赖。这样,你不需要手动在项目 A 中声明对项目 C 的依赖,Maven将自动完成这个过程。

  依赖传递还可以处理依赖冲突。当多个依赖项声明了相同的库但版本不同时,Maven会使用一定的规则来解决冲突。通常,它会选择一个合适的版本来满足所有依赖项,并将其包含在最终的构建结果中。也可以通过显式地声明特定版本来覆盖冲突解析过程。

  下面是一个例子:

【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承,# Java基础,maven,java

  spring-boot-starter依赖了下面4个jar包,所以项目也会自动下载引入下面的4个包。

依赖排除

  在Maven中,依赖排除(Dependency Exclusion)是指从传递的依赖关系中排除某个特定的依赖项。这可以用于解决依赖冲突或避免引入不需要的依赖项。

  有时候,一个项目可能依赖于某个库,而该库本身又依赖于其他库。但是,由于项目已经显式声明了对其他库的依赖,可能希望排除传递依赖关系中的某个库,以避免版本冲突或避免引入不需要的库。

  通过使用 <exclusions>元素,可以在Maven的依赖声明中指定要排除的依赖项。下面是例子:

<project>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>project-a</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.example</groupId>
                    <artifactId>unwanted-library</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

依赖原则

  依赖的原则:它是为了解决工程模块之间的jar包冲突的问题的,我们无法设置,maven有默认的原则,我们需要了解。

  当多个依赖项引入了相同的库但不同的版本时,Maven使用一套规则来解决依赖冲突。通常情况下,较高版本的库会被选择,但也可以使用 <dependencyManagement><exclusions> 等元素来显式地解决依赖冲突问题。

依赖继承

  如果项目需要将各个模块的 junit 版本统一为 4.9,那么到各个工程中手动修改无疑是非常不可取的。

  使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。

  创建父工程和创建一般的 Java 工程操作一致,唯一需要注意的是:打包方式处要设置为 pom。

  而在子工程中只需要引入父工程的工程坐标就可以了。

<parent>
    <!-- 父工程坐标 -->
    <groupId>...</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->
    <relativePath>../Parent/pom.xml</relativePath>
</parent>

  此时如果子工程的 groupId 和 version 和父工程重复则可以删除。
  将 Parent 项目中的 dependencies 标签,用 dependencyManagement 标签括起来。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

  在子项目中重新指定需要的依赖,删除范围和版本号。文章来源地址https://www.toymoban.com/news/detail-632369.html

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

到了这里,关于【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Maven排除依赖 exclusions

    排除依赖 exclusions 间接依赖是可以通过传递性依赖机制引入到当前项目中,而有时候第三方组件B的C依赖由于版本(1.0)过低存在安全漏洞。我们期望能够将该间接依赖直接剔除出去,不通过传递依赖的形式引入到项目中。这时即可通过exclusions元素实现,该元素下可以包含若干

    2024年01月21日
    浏览(13)
  • Maven中 排除依赖 exclusions

    Maven中 排除依赖 exclusions

    使用maven进行jar包依赖管理时,maven会自行管理jar包及其依赖链条,但往往会遇到依赖冲突问题,这时候就可以尝试使用exclusions来进行依赖管理 demo:排除tomcat 启用 jetty true

    2024年02月12日
    浏览(11)
  • 【Maven】2—命令行&创建Web工程&依赖&排除

    【Maven】2—命令行&创建Web工程&依赖&排除

    ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆 3.1.1 坐标 Maven中的坐标 向量说明: 使用三个『向量』在『Mave

    2023年04月13日
    浏览(9)
  • 解决maven 父工程依赖传递导致的 java.lang.NoClassDefFoundError: org/elasticsearch/xcontent/ToXContentObject

    因为项目需要,最近在学习elasticsearch,在使用elasticsearch Java 客户端时,出现了写问题,主要就是报各种的 NoClassDefFoundError 如: java.lang.NoClassDefFoundError: org/elasticsearch/xcontent/ToXContentObject ,出现这种 NoClassDefFoundError 的问题基本上就是maven 依赖错误或者版本不对,于是顺着这个

    2023年04月08日
    浏览(15)
  • Maven工程中排除依赖打包的两种方式

    在Maven工程中,我们常需要依赖各种第三方库完成项目开发,但在最终交付时,往往不希望将这些依赖本身打包到产品中,以减小发布包体积。此时,可以通过以下两种方式实现: 这适用于那些编译时需要,但运行时会由服务器或运行环境提供的库,典型的如Servlet API、JDBC驱动等。可以

    2024年02月16日
    浏览(14)
  • 【Maven】006-Maven 依赖传递和依赖冲突

    【Maven】006-Maven 依赖传递和依赖冲突

    概念: Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会 自动解析和获取 这些依赖,确保项目能够顺利构建和运行。 依赖传递包括 直接依赖和间接依赖 。直接依赖是项目 直接引用 的库,而间接依赖是 直接依赖所引用的其他库 。 作用: 简化项目管理 :Ma

    2024年02月02日
    浏览(8)
  • maven的依赖范围scope使用

    maven的依赖范围scope使用

    标签的位置:dependencies/dependency/scope 标签的可选值:compile/test/provided/system/runtime/import #①compile 和 test 对比 main目录(空间) test目录(空间) 开发过程(时间) 部署到服务器(时间) compile 有效 有效 有效 有效 test 无效 有效 有效 无效 #②compile 和 provided 对比 main目录(空间

    2024年02月10日
    浏览(9)
  • 聊聊Maven的依赖传递、依赖管理、依赖作用域

    在Maven中,依赖是会传递的,假如在业务项目中引入了 spring-boot-starter-web 依赖: 那么业务项目不仅直接引入了 spring-boot-starter-web 依赖,还间接引入了 spring-boot-starter-web 的依赖项: spring-boot-starter 、 spring-boot-starter-json 、 spring-boot-starter-tomcat 、 spring-web 、 spring-webmvc 。 Maven依

    2024年02月08日
    浏览(9)
  • 【Maven】依赖管理—导入jar包的三种方式、依赖范围设置

    【Maven】依赖管理—导入jar包的三种方式、依赖范围设置

    一、使用坐标导入 jar 包  二、使用坐标导入 jar 包 – 快捷方式  三、使用坐标导入 jar 包 – 自动导入  四、依赖范围 1、在 pom.xml 中编写 dependencies 标签 2、在 dependencies 标签中 使用 dependency 引入坐标 3、定义坐标的 groupId,artifactId,version 4、点击刷新按钮,使坐标生效 1、

    2024年02月16日
    浏览(17)
  • 【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )

    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )

    Maven 文档 Maven 是一款为 Java 项目构建管理、依赖管理的工具( 软件 ),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 依赖管理工具 maven下载版本 使用:apache-maven-3.6.3 软件结构: 环境变量 命令行显示版本 mvn -v 设置: maven/conf/settings.x

    2024年02月21日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包