自定义Java库的azure-storage-blob依赖未被Grails应用自动引入如何解决?
解决自定义Azure Blob存储库的依赖传递问题
你的问题核心是Gradle中implementation依赖的默认映射行为导致的:当用implementation引入com.azure:azure-storage-blob时,发布到Maven仓库的POM文件里,这个依赖的scope会被设为runtime,下游的Grails应用在编译阶段无法获取到该依赖的类(比如BlockBlobClient),只能在运行时拿到,所以会出现编译错误。
要解决这个问题,只需要把库的build.gradle里的依赖声明从implementation改成api:
// 替换前 implementation 'com.azure:azure-storage-blob:<版本号>' // 替换后 api 'com.azure:azure-storage-blob:<版本号>'
为什么这么改?
- api依赖:用于那些你的库对外暴露的API中直接使用到的依赖,这类依赖会被传递给下游项目的编译阶段,下游应用无需手动重复引入就能编译通过。
- implementation依赖:仅用于库内部实现的依赖,不会暴露给下游编译阶段,只会在运行时传递,适合那些库内部用但对外API不涉及的依赖。
修改完成后,重新发布你的lib-azure-blob-storage库,下游的Grails应用再次引入这个库时,就能自动获取到com.azure:azure-storage-blob的编译时依赖,无需手动添加就能解析BlockBlobClient类。
内容的提问来源于stack exchange,提问作者Deewendra Shrestha
相关产品推荐
相关产品推荐

