如何配置Gradle JavaExec任务使用Android模块运行时类路径
问题原因
你的JavaExec任务仅手动配置了模块编译后的本地类路径和固定版本的kotlin-stdlib,没有将dependencies块中声明的第三方依赖(包括kotlinpoet)纳入运行类路径,因此触发类找不到异常。
修正方案
将myTask任务的配置替换为以下代码即可:
task myTask(type: JavaExec) { // 获取debug构建变体的完整编译类路径,自动包含所有三方依赖和模块编译输出 def debugVariant = android.libraryVariants.find { it.name == 'debug' } classpath += debugVariant.getCompileClasspath(null) // 主类路径保持不变 main = 'com.foo.app.home.parser.MainKt' // 运行任务前自动完成debug构建,避免找不到自定义主类 dependsOn debugVariant.assemble } // 修正原有依赖配置:你之前定义的任务名为myTask,不是configGeneratorTask tasks.named('build') { dependsOn('myTask') }
可选说明
- 如果需要基于release变体运行任务,只需把代码中的
debug替换为release即可 - 无需再手动配置固定版本的kotlin-stdlib路径,类路径会自动使用你
dependencies中声明的对应版本kotlin标准库 - 低版本Gradle如果不支持
getCompileClasspathAPI,可以使用拆分写法:
task myTask(type: JavaExec) { def debugVariant = android.libraryVariants.find { it.name == 'debug' } classpath += debugVariant.javaCompileProvider.get().outputs classpath += files(debugVariant.kotlinCompileProvider.get().destinationDirectory) classpath += configurations.implementation main = 'com.foo.app.home.parser.MainKt' dependsOn debugVariant.assemble }
内容的提问来源于stack exchange,提问作者gpo
相关产品推荐
相关产品推荐

