第三章使用Maven:命令行环境-实验六:测试依赖的范围-《Java学习知识库》

admin 2025-11-02 01:14:16 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1、依赖范围
    • ①compile 和 test 对比
    • ②compile 和 provided 对比
    • ③结论
  • 2、测试
    • ①验证 compile 范围对 main 目录有效
    • ②验证test范围对main目录无效
    • ③验证test和provided范围不参与服务器部署
    • ④验证provided范围对测试程序有效

    1、依赖范围

    标签的位置:dependencies/dependency/scope标签的可选值:compile/test/provided/system/runtime/import

    ①compile 和 test 对比

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

    部署到服务器(时间):理解为是否参与打包为war

    ②compile 和 provided 对比

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

    ③结论

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

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

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

    2、测试

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

    TIPmain目录下的类:HelloServlet 使用compile范围导入的依赖:pro01-atguigu-maven验证:使用compile范围导入的依赖对main目录下的类来说是有效的有效:HelloServlet 能够使用 pro01-atguigu-maven 工程中的 Calculator 类验证方式:在 HelloServlet 类中导入 Calculator 类,然后编译就说明有效。

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

    测试方式:在主体程序中导入org.junit.Test这个注解,然后执行编译。具体操作:在pro01-maven-java\src\main\java\com\atguigu\maven目录下修改Calculator.java

    1. package com.atguigu.maven;
    2. import org.junit.Test;
    3. public class Calculator {
    4. public int sum(int i, int j){
    5. return i + j;
    6. }
    7. }

    执行Maven编译命令:

    1. [ERROR] /D:/maven-workspace/space201026/pro01-maven-java/src/main/java/com/atguigu/maven/Calculator.java:[3,17] 程序包org.junit不存在

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

    其实就是验证:通过compile范围依赖的jar包会放入war包,通过test范围依赖的jar包不会放入war包。实验六:测试依赖的范围 - 图1

    ④验证provided范围对测试程序有效

    测试方式是在pro02-maven-web的测试程序中加入servlet-api.jar包中的类。修改:pro02-maven-web\src*test\java\com\atguigu\maven\CalculatorTest.java*

    1. package com.atguigu.maven;
    2. import javax.servlet.http.HttpServlet;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import javax.servlet.ServletException;
    6. import org.junit.Test;
    7. import com.atguigu.maven.Calculator;
    8. // 静态导入的效果是将Assert类中的静态资源导入当前类
    9. // 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
    10. import static org.junit.Assert.*;
    11. public class CalculatorTest{
    12. @Test
    13. public void testSum(){
    14. // 1.创建Calculator对象
    15. Calculator calculator = new Calculator();
    16. // 2.调用Calculator对象的方法,获取到程序运行实际的结果
    17. int actualResult = calculator.sum(5, 3);
    18. // 3.声明一个变量,表示程序运行期待的结果
    19. int expectedResult = 8;
    20. // 4.使用断言来判断实际结果和期待结果是否一致
    21. // 如果一致:测试通过,不会抛出异常
    22. // 如果不一致:抛出异常,测试失败
    23. assertEquals(expectedResult, actualResult);
    24. }
    25. }

    然后运行Maven的编译命令:mvn compile然后看到编译成功。

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  4