文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-15 06:47

关注

一、使用坐标导入 jar 包

 二、使用坐标导入 jar 包 – 快捷方式

 三、使用坐标导入 jar 包 – 自动导入

 四、依赖范围


在 pom.xml 中编写 标签

标签中 使用 引入坐标

定义坐标的 groupId,artifactId,version

点击刷新按钮,使坐标生效

在 pom.xml 中 按 alt + insert,选择 Dependency

在弹出的面板中搜索对应坐标,然后双击选中对应坐标

点击刷新按钮,使坐标生效

选择 IDEA中 File --> Settings

在弹出的面板中找到 Build Tools

选择 Any changes,点击 ok 即可生效

三种不同的类路径

Maven在执行过程中有三种不同的classpath,它们运行Java代码的时候,使用不同的classpath类路径下的jar包来执行。三种classpath范围如下:

classpath范围理解为
编译类路径jar包是给main目录下的java代码使用
测试类路径jar包是给test目录下的java代码使用
运行时类路径jar包是在程序运行的时候才起作用,理解为target中才起使用

 常用依赖范围

什么是依赖范围:使用上面三种类路径中的一种或多种

通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。默认值:compile

依赖范围

编译classpath

测试classpath

运行classpath

例子

compile

Y

Y

Y

logback

test

-

Y

-

Junit

provided

Y

Y

-

servlet-api

runtime

-

Y

Y

jdbc驱动

system

Y

Y

-

存储在本地的jar包

import

引入DependencyManagement


示例:test依赖范围

在02_Web项目中,main目录下创建一个类的,写一个测试类,加上@Test注解,发现报错。

 

因为在pom.xml的dependency中配置了scope为test,表示只在test目录下可以使用,如果改成compile或provided并且刷新Maven Projects,则可以使用。

  junit  junit  4.11    test

示例:provided依赖范围

例如:servlet-api就是编译和测试的时候才有用,在运行时不用,因为Tomcat容器已经提供了。如果打包到war文件中,可能会导致与Tomcat容器中的Servlet有冲突。

 1. 现在我们删除Servlet中的scope,这时它的依赖范围变成默认compile,即在编译,测试,运行时(打包到war中)都可以使用。

    javax.servlet    javax.servlet-api    3.1.0

通过Maven启动Tomcat7的方式运行,发现出现如下错误,这是因为我们的Servlet被打包到了war包中,与Tomcat容器中的Servlet API发生了冲突导致

 3. 这时如果使用生成周期package打包,会发现在lib下有多余的jar包

 4. 将servlet的scope改成provided。停止Tomcat7,执行生命周期的clean命令,再次运行package,可以看到新产生的lib下没有servlet的jar包

 5. 再次启动tomcat7,执行正常


示例:runtime依赖范围

JDBC访问MySQL数据库,在写代码的过程中是针对接口开发,不会牵涉到任何JDBC的实现类。如:得到连接对象Connection不是通过我们在代码中写new JDBC4Connection子类来得到的,而是程序在执行过程中才读取MySQL的驱动类生成它的子类对象,只在测试和运行期间才会用到MySQL的子类,所以设置为runtime范围。

在pom.xml中配置mysql驱动的依赖,指定依赖范围为runtime,只在测试和运行时期间起作用。

    mysql    mysql-connector-java    5.1.22        runtime

在test中,创建一个JDBC的测试方法,得到连接对象,可以发现JDBC的实现类在编译阶段是用不到的。因为编译阶段没有用到任何与JDBC4Connection相关的类,只在测试阶段和运行时才会用到。

@Testpublic void testConnection() throws SQLException {    Connection connection = DriverManager.getConnection("jdbc:mysql:///test", "root", "root");    System.out.println(connection);}

得到MySQL的连接对象


来源地址:https://blog.csdn.net/zsy3757486/article/details/129480228

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯