Maven test依赖移除uberjar中传递性compile依赖的异常问题
Maven依赖作用域覆盖传递依赖的行为解析
这是Maven的正常预期行为,完全符合它的依赖调解规则,不是bug。
核心原因:
- Maven会优先采用项目pom中显式声明的依赖配置,而非传递过来的依赖配置。当你自己在pom里把
com.squareup.okhttp3:okhttp设为test作用域时,这个显式声明会覆盖splunk-appender传递过来的compile作用域配置。 test作用域的依赖仅在编译测试代码、运行测试用例阶段生效,不会被打包到生产环境的jar包中。而Spring Boot Maven插件的打包逻辑,默认只会包含compile和runtime作用域的依赖,所以okhttp会被排除。- 当你移除自己加的test依赖后,Maven会使用splunk-appender传递过来的
compile作用域配置,okhttp自然会被包含到最终jar里。
解决方案:
- 如果你的生产代码(比如splunk-appender运行时)需要okhttp,不要自己显式声明okhttp为test依赖,让传递依赖的
compile作用域自然生效即可。 - 如果只是测试代码需要okhttp(比如单独的测试场景),可以显式声明test作用域,但这不会影响生产环境的依赖——生产环境依然使用splunk-appender传递的compile版本,Maven会区分作用域加载依赖。
内容的提问来源于stack exchange,提问作者Mr. Gung
相关产品推荐
相关产品推荐

