如何在build.gradle中编写Task按需复制指定文件名格式的依赖包?
如何在build.gradle中编写Task按需复制指定文件名格式的依赖包?
我完全懂你的困扰!之前的Task把所有依赖一股脑复制进去,连项目自身的编译产物都混在里面,确实没必要。咱们可以修改saveDependencies任务,精准筛选出你需要的Kotlin相关依赖jar包,解决那个kotlin/jvm/internal/Intrinsics的类找不到问题。
你可以把Task改成这样:
tasks.register('saveDependencies', Copy) { // 只针对运行时依赖配置,避免引入编译时仅需的依赖 from configurations.runtimeClasspath // 筛选文件名以"kotlin"开头、以".jar"结尾的文件 include "kotlin*.jar" into "build/libs" }
简单解释下调整点:
- 换掉原来遍历所有
configurations的逻辑,直接用configurations.runtimeClasspath,这是Lambda运行时真正需要的依赖集合,避免把编译阶段才用的依赖也复制进去; - 通过
include "kotlin*.jar"来精准匹配文件名,*是通配符,能匹配所有以kotlin开头、.jar结尾的依赖包,比如kotlin-stdlib-1.9.20.jar这类标准库文件; - 保持输出目录
into "build/libs"不变,这样你后续Docker构建时就能直接从这个目录取到需要的Kotlin依赖了。
运行这个Task后,去build/libs目录看看,应该就只有你需要的Kotlin相关jar包,不会再混入项目自身的编译产物或者其他无关依赖,这样AWS Lambda运行时就能找到Kotlin标准库类,解决那个NoClassDefFoundError啦!
备注:内容来源于stack exchange,提问作者atkayla
相关产品推荐
相关产品推荐

