maven-不传递依赖jar

2,468 阅读1分钟

默认

默认是传递,默认是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,大部分都用默认就可以了。

参考

blog.csdn.net/kimylrong/a…