Maven依赖scope中compile与runtime含义辨析及Gradle使用疑问
关于Gradle maven-publish插件依赖Scope与Maven官方定义差异的疑问解答
Gradle的api和implementation配置,本质是补上了Maven原生依赖机制的短板——Maven原本没有区分API依赖和实现依赖的能力,所有compile scope的依赖都会无条件传递给下游项目,导致编译类路径冗余,还容易引发依赖冲突。
当你用maven-publish插件发布库时:
api配置的依赖会被映射为Maven的compilescope,这不是Gradle误用,而是基于实际使用场景重新定义了这个scope的作用:它是在告诉依赖你的下游项目——你编译时需要这个依赖才能正常使用我的库implementation配置的依赖会被映射为runtimescope,意思是下游只用我的库编译时根本不需要这个依赖,只有运行阶段才会用到
Maven官方文档里对compile scope的定义,确实是站在组件自身的角度:表示组件自己编译时需要这个依赖,如果下游要重新编译这个组件,才需要把它加入类路径。但现实情况是,几乎没人会去重新编译第三方发布的类文件库,所以Maven原生的scope定义在依赖传递这个核心场景下,实用性非常有限。
Gradle并没有误用Maven的scope,而是针对Maven生态做了适配性优化,把scope的含义从“组件自身的编译需求”转向了“下游使用者的依赖需求”,完美解决了Maven无法区分API/实现依赖的痛点,让依赖传递更高效、更贴合实际开发场景。
内容的提问来源于stack exchange,提问作者domin
相关产品推荐
相关产品推荐

