默认
默认是传递,默认是compiler。
不想传递?
一、什么是不传递?
a应用项目依赖公共工具b.jar,b.jar依赖c.jar。
如果想a项目不需要依赖c.jar,就是不传递。即间接依赖的jar不传递依赖给a项目。
二、为什么不想传递?
应用场景
1、tomcat自带了servlet.jar和jsp.jar,不需要项目里依赖的servlet.jar和jsp.jar,但是项目编译的时候又需要servlet.jar和jsp.jar,不然编译失败。怎么解决?编译期间提供servlet.jar和jsp.jar,但是打包的时候排除掉servlet.jar和jsp.jar。因为如果不排除,servlet.jar和jsp.jar就有不同的版本,就冲突了。
2、应用项目依赖了工具jar,工具jar又依赖了c.jar,但是应用项目自身也依赖了c.jar,这个时候就需要排除c.jar。 解决方法?1.在应用项目里使用exclusion排除。2.在工具jar里的c.jar使用scope-provided,即不传递给应用项目。
三、解决方法?
使用scope-provided,不传递。
示例
作用域是provided
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.5.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
<scope>provided</scope>
</dependency>
作用域-test
也是编译期间用到jar,但是打包的时候不会传递该jar,所以运行期间就不会有jar冲突的问题。
应用场景?junit。
总结
默认就用compile,像测试工具junit可以用test,能够由外部容器提供的jar包,就可以使用provided,大部分都用默认就可以了。