首页 > 其他分享 >Maven依赖

Maven依赖

时间:2023-10-09 21:47:43浏览次数:25  
标签:compile 依赖 provided jar Maven 有效 test

依赖

说明

如果A工程里面用到的了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B

Maven中的具体问题
  • jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地
  • jar包之间的依赖:通过依赖的传递性自动完成
  • jar包之间的冲突:通过对依赖的配置进行调整,让某些Jar包不会被导入
依赖的范围

标签的位置:dependencies/dependency/scope

标签的可选值:compile/test/provided/system/runtime/import

  1. compile 和 test 对比

    main目录(空间) test目录(空间) 开发过程(时间) 部署到服务器(时间)
    compile 有效 有效 有效 有效
    test 无效 有效 有效 无效
  2. compile 和 provided 对比

    main目录(空间) test目录(空间) 开发过程(时间) 部署到服务器(时间)
    compile 有效 有效 有效 有效
    provided 有效 有效 有效 无效
  3. 结论

    compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。比如 SSM 框架所需jar包。

    test:测试过程中使用的 jar 包,以 test 范围依赖进来。比如 junit。

    provided:在开发过程中需要用到的“服务器上的 jar 包”通常以 provided 范围依赖进来。比如 servlet-api、jsp-api。而这个范围的 jar 包之所以不参与部署、不放进 war 包,就是避免和服务器上已有的同类 jar 包产生冲突,同时减轻服务器的负担。说白了就是:“服务器上已经有了,你就别带啦!”

依赖的传递
  1. 概念
    A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?
  2. 传递的原则
    在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。
    • B 依赖 C 时使用 compile 范围:可以传递
    • B 依赖 C 时使用 test 或 provided 范围:不能传递,所以需要这样的 jar 包时,就必须在需要的地方明确配置依赖才可以。
依赖的排除
  1. 概念
    当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免 jar 包之间的冲突。
  2. 配置方式
    <dependency>
        <groupId>com.atguigu.maven</groupId>
        <artifactId>pro01-maven-java</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
        <!-- 使用excludes标签配置依赖的排除	-->
        <exclusions>
            <!-- 在exclude标签中配置一个具体的排除 -->
            <exclusion>
                <!-- 指定要排除的依赖的坐标(不需要写version) -->
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

标签:compile,依赖,provided,jar,Maven,有效,test
From: https://www.cnblogs.com/yuxl94/p/17753229.html

相关文章

  • Maven继承
    继承说明Maven工程之间,A工程继承B工程B工程:父工程A工程:子工程本质上是A工程的pom.xml中的配置继承了B工程中pom.xml的配置。作用在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。它的背景是:对一个比较大型的项目进行了模块拆分。一个......
  • Maven
    一、Maven加载原理Maven工具会根据pom模型(pom.xml)加载当前项目需要使用的资源。每次加载都是从本机某个指定的文件夹去加载。如果本机文件夹中没有这个资源,会从Maven远程服务器中下载到本机文件夹,Maven再去加载本机文件夹中资源。专业概念:中央仓库(CentralRepository):Maven......
  • maven多模块版本统一管理
    maven多模块版本统一管理结构:父模块子1模块依赖子2模块子2模块父模块定义<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p......
  • 让开发自动化: 利用 Ivy 管理依赖项
    http://www.ibm.com/developerworks/cn/java/j-ap05068/index.html实际上,所有软件开发项目都必须依靠来自其他项目的源代码。例如,许多项目可能依靠log4j等日志记录工具和Struts之类的Web框架。您的开发团队不会维护其他项目的源代码,但要依靠其API来实现项目中的定制软件。......
  • 用Artifactory管理内部Maven仓库
    1.介绍Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的副本,Maven建议的方法是将所有软件构件存储于一个叫做repository的远程仓库中。Maven会从ibiblio.org中的公用仓库中同步构件,这个公用仓库下载缓慢、不稳定,并且......
  • 在Eclipse中使用Maven 2.x指南
    1.Maven2RepositoryEclipse需要知道Maven的本地仓库的路径。所以,类路径变量M2_REPO必须设置。执行以下命令:mvn-Declipse.workspace=<path-to-eclipse-workspace>eclipse:add-maven-repo 你也可以在eclipse内定义一个新的classpath变量:从菜单条,选择Window>Preferences,选择jav......
  • Java11配置maven
    这里假设Java11和maven都正确安装,使用的版本为Java11、maven3.6.1测试环境变量Javawin+r打开运行,输入cmd,打开命令行提示符,输入java--version如下C:\Users\siyu>java--versionopenjdk11.0.22019-01-15OpenJDKRuntimeEnvironment18.9(build11.0.2+9)OpenJDK64-......
  • IEDA 中Maven 编译错误 Compilation failure的解决方法
    IEDA中Maven提示编译错误Compilationfailure 检查发现项目虽然已经配置了JDK11,但是却引用的是JRE1.5解决方法:1、修改maven的setting.xml文件中添加下面的配置: <profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk>......
  • IDEA搭建maven环境
    原文链接:https://www.longkui.site/program/java/idea-maven/4699/重装电脑后,需要重新搭建maven环境,所以写下这篇文章记录一下。首先,下载maven:maven官网:Maven–WelcometoApacheMaven打开后点击“download”然后找到zip包进行下载:如果你要下载低版本的maven,请参考这......
  • maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories
    原文链接:https://www.longkui.site/error/maven-default-http-blocker-http-0-0-0-0-blocked-mirror-for-repositories/4659/0.背景给新电脑配置maven环境,然后执行mvncleaninstall的时候开始报错,maven-default-http-blocker(http://0.0.0.0/):Blockedmirrorforrepositor......