在回答这个问题之前,我先简单的阐述一下java程序运行的阶段:
源码 =>编译 =>测试=>运行 =>打包 =>部署
上述程序中同学们应该都可以看的懂,编写一个servlet 打印 hello world。
1.IDE在编译阶段按照pom.xml中的依赖关系会去查找log4j servlet的二方包,如果找不到就会出现错误
2.在测试某个函数会调用junit 二方包
3.运行阶段
4.打包的时候,pom.xml会告诉maven,哪些jar不需要打进去
所以它的pom.xml应该是这样的
总结:我们平常最大的scope疑问在provided 和 runtime之间。记住一个原则就行,如果容器有的jar,在项族或局目pom.xml中就使用provided如果需要动态加载的jar就使用兆让runtime 。默认scope是compile
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
https://blog.csdn.net/qq_31071543/article/details/91350906
https://www.jianshu.com/p/a9bd44a83dc5
https://www.cnblogs.com/moxiaotao/p/9965410.html
scope 元慧毕庆素为maven dependency下面一个控制作用域的子元素,maven官方称为transitive dependencies有6个可选值,其值可以为:compile, provided, runtime, test, system and import,各自的作用为:
2.provided: provided与compile基本相同,但表示前握需要JDK或者容器提供一个运行时的依赖,比如说当部署运行一个web应用时,这时候 servlet api或者类似的J2EE的API需要将scope写成provided,该属性不具备传递性,不会出现在打出的war包中
5.system:与provided类似 唯一不同的时 需要提供一个明确包含该jar,该jar包的aritfact是基于本地,不是maven 三方库中的,正常情况下不使用
6.import: 仅maven 2.0.9版本之后才支持该scope,并且仅可用于 pom类型的依赖,该属性打破了依赖的传递性,指定使用特数乱定的pom
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)