Gradle环境下构建Kafka Connector时Jar任务报错求助
解决Gradle构建Kafka Connector时的依赖解析错误
错误原因
Gradle的implementation是依赖声明型配置,默认canBeResolved=false,仅用于声明项目依赖,不能直接用来解析和收集依赖文件。你在jar任务中直接调用configurations.implementation打包依赖,就会触发该错误。
解决方案
方案1:使用Gradle内置可解析配置
直接将jar任务中的配置替换为runtimeClasspath——该配置继承了implementation,且默认canBeResolved=true:
jar{ from{ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
方案2:自定义可解析配置
如果需要更精细的依赖控制,可以自定义一个继承implementation的可解析配置:
- 在
dependencies块前添加配置定义:
configurations { connectorLibs.extendsFrom implementation connectorLibs.canBeResolved = true }
- 修改
jar任务使用自定义配置:
jar{ from{ configurations.connectorLibs.collect { it.isDirectory() ? it : zipTree(it) } } }
额外优化建议(针对Kafka Connector开发)
Kafka Connect运行环境已内置connect-api和slf4j-api,将这两个依赖改为compileOnly可避免打包冲突:
dependencies { compileOnly 'org.apache.kafka:connect-api:2.5.0' compileOnly 'org.slf4j:slf4j-api:1.7.24' implementation 'com.google.code.gson:gson:2.9.0' implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.9.2' runtimeOnly 'org.slf4j:slf4j-simple:1.7.24' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' }
内容的提问来源于stack exchange,提问作者leecukiki
相关产品推荐
相关产品推荐

