Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)

简介: Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)

【1】依赖的范围

结论

compile 和 test 对比:

compile 和 provided 对比:

验证

①验证 compile 范围对 main 目录有效

main目录下的类为HelloServlet,compile范围引入的依赖为:pro01-maven-java,pro01-maven-java中的类为:Calculator,我们只需验证main目录下的类为HelloServlet能否使用Calculator即可。只需要通过import将要测试的类引入当前类,引入后如果编译能通过,则说明可用,这个范围的依赖对当前类有效。

我们来编译一下。发现成功了,说明是没有问题的:

②验证test范围对main目录无效

test范围的依赖为junit

junit可以使用的注解为@Test,那还是跟上面一样的原理:

然后编译一下发现编译不能通过:

③验证test和provided范围不参与服务器部署

我们需要验证:通过compile范围依赖的jar包会放入war包,通过test和provided范围依赖的jar包不会放入war包。

然后我们打包一下看一下:

发现只有通过compile范围依赖的jar包会放入war包。

【2】依赖的传递性

结论:

在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。

B 依赖 C 时使用 compile 范围:可以传递

B 依赖 C 时使用 test 或 provided 范围:不能传递,所以需要这样的 jar 包时,就必须在需要的地方明确配置依赖才可以。

①compile 范围:可以传递

我们来测试一下:

测试方式:让 pro01-maven-java 工程依赖 spring-core

具体操作:编辑 pro01-maven-java 工程根目录下 pom.xml,加入这个依赖:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.0.0.RELEASE</version>
</dependency>

然后使用 mvn dependency:tree 命令查看效果:

我们再来看一下这个依赖的pom文件:

所有当B 依赖 C 时如果使用 compile 范围,那么依赖是可以传递的。

②test 或 provided 范围:不能传递

我们可以看到pro01-maven-java 依赖了 junit,但是在 pro02-maven-web 工程中查看依赖树的时候并没有看到 junit,所以test范围不能传递。

要验证 provided 范围不能传递,可以在 pro01-maven-java 工程中加入 servlet-api 的依赖:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

然后再查看pro02-maven-web 工程的依赖树,发现还是跟原来一样,并没有servlet-api这个依赖。

【3】依赖的排除

依赖排除就是:当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。

依赖的排除目的就是为了避免架包的冲突。(架包的版本可能不一样)

所以配置依赖的排除其实就是阻止某些 jar 包的传递。因为这样的 jar 包传递过来会和其他 jar 包冲突。

我们来举个例子:

我们在 pro02-maven-web 工程中配置对 commons-logging 的排除。

先来看一下配置前的依赖:

配置方式:

<dependency>
  <groupId>com.atxiaoyu.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>

配置完成后再来查看一下依赖:

我们可以发现在 spring-core 下面就没有 commons-logging 了。

目录
相关文章
|
1天前
|
Java Maven
Maven 引入外部依赖
在 Maven 项目中引入外部依赖,如 ldapjdk.jar,通常涉及两个步骤。首先,在 src/lib 文件夹下添加 jar 文件,然后在 pom.xml 的 dependencies 部分声明该依赖,使用 system 策略
|
8天前
|
Java 项目管理 Maven
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
Maven的聚合和继承是Java开发中重要的概念。聚合允许将多个项目组合成一个构建单元,简化多模块项目的构建过程,提高构建效率。继承则让子项目重用父项目的配置和属性,避免了重复定义,增强了项目的一致性和可维护性。通过聚合和继承,Maven为多模块项目的构建和管理提供了高效且灵活的支持,减少了配置冗余,提升了开发效率。
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
|
8天前
|
Java Maven
Maven 引入外部依赖
在 Maven 项目中引入 LDAP 操作库 ldapjdk.jar,需将 jar 文件放入 src/lib 文件夹,并在 pom.xml 的 dependencies 部分添加依赖配置
|
8天前
|
Java Maven Spring
Maven 依赖搜索顺序
Maven在构建时按顺序搜索本地-&gt;中央仓库-&gt;已配置的远程仓库来查找依赖。若未设置远程仓库,会报错。可将默认仓库替换为阿里云仓库,通过修改settings.xml的mirrors节点或在repositories节点添加仓库地址。在pom.xml中指定依赖后,运行`mvn install`拉取。
|
8天前
|
Java Apache 项目管理
使用Maven进行Java项目构建与依赖管理
【4月更文挑战第16天】Apache Maven是Java项目的核心构建工具,它基于POM进行项目管理和构建自动化,简化构建过程并管理依赖。Maven提供标准化的目录结构、自动依赖解决、丰富的插件生态、多模块构建支持和版本管理功能。通过安装Maven、创建项目、配置依赖、构建及使用插件,开发者能高效管理Java项目,提升开发效率。了解和掌握Maven对于Java开发者至关重要。
|
8天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
22 1
|
8天前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段
|
5天前
|
Java Apache Maven
Maven 项目文档
在C:/MVN下,使用命令`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`创建Maven Java项目。确保`pom.xml`包含`maven-site-plugin`和`maven-project-info-reports-plugin`配置,版本分别至少为3.3和2.7,以避免`NoClassDefFoundError`。
|
4天前
|
Java Maven
Maven 构建 Java 项目
使用 Maven 的 archetype:generate 命令创建 Java 项目,如 `mvn archetype:generate` -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false,在 C:\MVN 下生成基于 maven 的 consumerBanking 项目。
|
7天前
|
Java Maven
SpringBoot项目的用maven插件打包报Test错误
SpringBoot项目的用maven插件打包报Test错误

热门文章

最新文章

推荐镜像

更多