阅读 70

实战,读懂maven <scope>

场景:在添加日志时发现项目没有引用fastjson包,后来发现其实项目已经引用了,但是不是在所在模块引用的,于是看了下引用fastjson包的依赖,发现了 runtime

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.3</version>
        <scope>runtime</scope>
    </dependency>
复制代码

一般来说,scope是比较少使用的,但是这个怎么这么不一般,查了相关资料,发现runtime实际上是在运行时时才进行编译,如果不是运行时时不会进行编译的。

image.png

例子说明jdbc的驱动适用了runtime的scope,是因为jdbc驱动本身是使用反射Class.forName来执行的,以为着如果程序不运行,编译jdbc驱动其实意义不大,而且编译这部分代码其实也会增大程序的开销,比如影响程序的每次编译时间,但是这样写需要相关的代码每次都是在运行时才被编译成class文件,所以会增加运行时程序的开销,对于不是动态生成的类是不能使用的。

fastjson源码中不涉及到动态生成代码,比如使用反射,动态代理。所以项目中使用runtime是不正确的。

文章分类
后端
文章标签