Gradle7.3.3子模块依赖:app项目无法解析报错问题咨询
Gradle 7.3.3 调用Android App模块main方法报错解决方案
问题根因
两个报错分别对应两个Gradle机制误区:
- 依赖解析失败(
Could not resolve project :app):默认app模块应用的是com.android.application插件,属于最终产出APK的应用模块,没有对外暴露Java库模块标准的apiElements/runtimeElements可消费配置,无法被纯Java Library模块通过常规implementation project(":app")语法依赖,Gradle找不到匹配的依赖产出就会直接解析失败。 - 类找不到(
ClassNotFoundException):移除implementation直接写project(":app")只是将app模块的Project对象本身加入依赖集合,并没有把app模块编译后的class文件、app的三方/模块依赖加入运行时类路径,JVM启动时自然找不到目标主类。 - 额外提醒:不要尝试把app模块的插件改成
com.android.library解决依赖问题,会直接导致app模块无法正常生成可安装APK,属于破坏性修改。
正确配置方式
不需要给libdbconfig添加对app的常规依赖,直接在dbconfig任务中手动拼接所需类路径即可,修改libdbconfig/build.gradle为如下内容:
plugins { id 'java' } // 强制Gradle在配置当前模块前完成app模块的配置流程,避免读取app属性时空指针 evaluationDependsOn(':app') task dbconfig(type: JavaExec) { // 加入当前libdbconfig模块自身的运行时类路径 classpath = sourceSets.main.runtimeClasspath // 加入app模块debug变体编译输出的class文件 def appDebugVariant = project(':app').android.applicationVariants.find { it.name == 'debug' } classpath += appDebugVariant.javaCompileProvider.get().outputs.files // 加入app模块debug变体的所有运行时依赖(包含三方库、子模块依赖等) classpath += project(':app').configurations.getByName('debugRuntimeClasspath') mainClass = "com.inadaydevelopment.herdboss.DatabaseConfigUtil" }
配置说明
- 上述配置默认使用app模块的debug变体类路径,debug变体不需要额外签名、混淆配置,可直接触发编译;如果需要使用release变体的类,将代码中
debug、debugRuntimeClasspath替换为对应release相关名称即可。 - 执行
libdbconfig:dbconfig任务时,Gradle会自动触发app模块debug变体的编译流程,不需要手动提前编译app模块。
内容的提问来源于stack exchange,提问作者Kenny Wyland
相关产品推荐
相关产品推荐

