3.6.Maven-依赖管理-依赖范围

一.依赖范围:

在pom.xml配置文件中所配置的依赖默认情况下是可以在任何地方使用的,这个地方包括main文件夹下、test文件夹下,也可以在这个项目打包的时候将这个jar包打包进去,这是默认情况。

然而在Maven项目中可以通过标签scope来控制依赖的作用范围,也就是说可以通过scope的配置来控制当前依赖是在主程序范围内有效、还是测试程序范围内有效,scope的取值如下图:

如上图,compile是默认值,可以不写,该值意味着在主程序、测试程序以及打包(运行)均有效,在大多项目开发中scope的取值都是默认值compile。其他同理。

上图中junit单元测试,仅仅在测试程序范围内有效。


二.例一:

以上述图片的maven-project01为例,

在pom.xml文件下没有设置依赖范围,那就是默认的compile,意味着该依赖的作用范围为主程序、测试程序以及打包(运行),

首先验证在主程序内是否生效,打开main包下的主程序,如下图:

如上图,判断main包下主程序中依赖是否生效,主要看能不能使用该依赖的接口或者类即可,logback依赖提供了接口Logger,如下图:

如上图,输入Logger系统会有提示slf4j包或者logback包下(注意不是logging包下)的类或者接口,说明依赖生效。

接下来看测试程序范围内是否有效,在test包下的java目录下创建一个类,如下图:

如上图,现创建一个方法来判断依赖是否生效,如下图:

如上图,输入Logger系统会有提示slf4j包或者logback包下(注意不是logging包下)的类或者接口,说明依赖生效。

最后要判断项目打包时该依赖是否参与,如下图:

如上图,首先在pom.xml文件中添加一个打包插件:

XML 复制代码
<!--打包插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals><goal>single</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

其实Maven也会提供一个打包的功能(package),但是Maven提供的打包的插件只能将当前项目的资源打包进去,所依赖的JAR包是不会一起打包进去的,如下图:

接下来进行打包(package)操作,判断logback的依赖会不会打包进去,打开Maven面板,点击打包(package)后就会进行打包操作,打包后的结果如下图:

如上图,打包好的JAR包会放在target目录下,在磁盘中打开target目录,如下图:

如上图,现在看打包好的JAR包中是否包含logback的依赖,选择有dependencies的JAR包,如下图:

用记事本打开:

如上图,可知ch->qos->logback下的依赖是有的,这就说明scope配置为默认值compile时在任何范围内都是有效的,包含主程序、测试程序、打包(运行)。


三.例二:

scope配置为默认值compile时,如下图:

main包下的主程序和test包下的java包下的程序分别引入slf4j包下的Logger(也可以引入logback包下的,但不能引入logging包下,因为logging包不是特有的依赖),如下图:

接下来设置scope的值为test并刷新Maven,如下图:

如上图,

首先打开main包下的主程序,如下图:

如上图,发现main包下的主程序已经不能使用该依赖了,

再打开test包下的java包下的程序,如下图:

如上图,发现test包下的java包下的程序是可以使用该依赖的,这就是scope设置为test的效果(主程序不能使用,测试程序可以使用)。

最后测试打包时这个logback现在还会不会参与打包,先把target目录删掉,再进行Maven面板上的打包(package)操作,结果如下图:

如下图,有了一个新的target包:

打开磁盘目录:

用记事本打开有dependencies的JAR包,其中是否包含logback的依赖,如下图:

如上图,可知没有包含logback的依赖,所以打包时没有生效。

其他的scope值同理,就不演示了。


相关推荐
mldong3 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾13 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe6874 小时前
es的密码带有特殊字符,导出
java
pnoker4 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy4 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科5 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
骇客野人5 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng15 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3226 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
evans在进步7 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio