Gradle库中反射调用外部包的依赖传递问题
问题解决方案
你的问题核心是依赖传递性缺失导致的:使用implementation声明本地jtds jar依赖时,该依赖仅在你的内部库编译和运行时可用,但不会传递给依赖这个库的其他项目,因此其他项目运行时找不到net.sourceforge.jtds.jdbc.Driver类。
快速修复:将依赖改为api
修改内部库的build.gradle依赖配置,把implementation替换为api:
dependencies { api files('libs/jtds-1.3.1.jar') }
api关键字会将该依赖标记为可传递,当其他Gradle项目依赖你的内部库时,jtds jar会自动被引入到它们的类路径中,无需手动复制jar或修改构建文件。
更规范的方案:将本地jar发布到本地Maven仓库
如果需要长期维护这个内部库,建议把本地jtds jar发布到本地Maven仓库,用标准坐标管理依赖:
- 在内部库的
build.gradle中添加安装到本地仓库的任务:
task installJtdsToLocalMaven(type: Upload) { configurations = [configurations.api] repositories { mavenInstaller { pom.groupId = 'net.sourceforge.jtds' pom.artifactId = 'jtds' pom.version = '1.3.1' } } }
- 运行Gradle任务将jar安装到本地仓库:
./gradlew installJtdsToLocalMaven
- 修改内部库的依赖为标准Maven坐标:
dependencies { api 'net.sourceforge.jtds:jtds:1.3.1' }
这种方式更符合Gradle依赖管理规范,后续其他项目依赖你的库时,Gradle会自动从本地仓库拉取jtds依赖,避免手动管理本地jar的复制问题。
内容的提问来源于stack exchange,提问作者iAmWhy
相关产品推荐
相关产品推荐

