概述
1. Maven Scope provided 和 optional 的区别
它们的传递性是一样的,都不会传递。
唯一区别在于,例如 一个 war项目,provided的jar 不会被打进war包,而 optional 的jar 会打进war包。
从概念上、本质上来说:
-
provided的包是确实必须要的(如果第三方用到它,则需要第三方提供,如果没有,就会出错)
-
而optional的本意是,这个包是可选的(无论有没有,都不会出错)
2. Maven的5种scope对于3种class有否有效
scope class | compile | runtime | test | example |
compile | Y | Y | Y | spring-core |
runtime | - | Y | Y | jdbc驱动 |
provided | Y | - | Y | servlet-api |
system | Y | - | Y | 本地jar包 |
test | - | - | Y | junit |
从中可以看出:
1、provided和system范围scope是一样的,只是system的文件来自本地jar包,而provided的来自maven仓库。
2、所有scope的都能在test-class下使用
3、compile 和 runtime 的典型区别案例就是jdbc驱动,jdbc驱动编译时不需要,但是运行时需要。
另外,Eclipse和Idea两种IDE对于maven scope的运用不一样:
例如 main/src下面有个java程序的Main方法,eclipse直接按F11运行,所有scope的jar包都可以依赖到,但是idea下面只有compile和runtime的jar包能用,其他provided、system和test的jar包都会报错——找不到class。
具体参见这篇文章:《Idea下运行找不到class、找不到jar包》
最后
以上就是尊敬草丛为你收集整理的Maven的5种scope(加上optional 6种)的全部内容,希望文章能够帮你解决Maven的5种scope(加上optional 6种)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复