调整包结构后Gradle构建JavaDoc失败提示class R not found求助
问题根因
调整包结构后Javadoc编译失败,核心是现有配置存在三处适配问题:
- 任务没有关联安卓项目的编译任务,导致跨包引用的类还未编译完成就执行Javadoc,找不到对应符号
- 类路径配置没有包含项目自身的编译输出目录,跨包引用自定义类时无法找到对应定义
- 现有配置重复添加了bootClasspath,存在冗余可能引发类加载冲突
修复后的配置
将原有javadoc任务替换为以下内容即可:
task javadoc(type: Javadoc) { // 关联编译任务,保证执行javadoc前所有类已经编译完成 dependsOn 'compileDebugJavaWithJavac' source = android.sourceSets.main.java.srcDirs // 修复类路径:添加项目自身的编译输出+安卓启动类路径+依赖 classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) classpath += files(project.android.sourceSets.main.output.classesDirs) classpath += configurations.javadocDeps options.memberLevel = JavadocMemberLevel.PRIVATE // 忽略安卓相关非关键性警告,避免阻断任务执行 options.addStringOption('Xdoclint:none', '-quiet') options.encoding = "UTF-8" afterEvaluate { def aarDependencies = classpath.filter { it.name.endsWith('.aar') } classpath -= aarDependencies aarDependencies.each { aar -> def outputPath = "$buildDir/tmp/aarJar/${aar.name.replace('.aar', '.jar')}" classpath += files(outputPath) dependsOn task(name: "extract ${aar.name}").doLast { extractEntry(aar, 'classes.jar', outputPath) } } } } private static def extractEntry(archive, entryPath, outputPath) { if (!archive.exists()) { throw new GradleException("archive $archive not found") } def zip = new ZipFile(archive) zip.entries().each { if (it.name == entryPath) { def path = Paths.get(outputPath) if (!Files.exists(path)) { Files.createDirectories(path.getParent()) Files.copy(zip.getInputStream(it), path) } } } zip.close() }
验证步骤
修改后仍有报错可按以下操作排查:
- 执行
./gradlew clean javadoc全量构建,避免旧缓存影响 - 检查所有类的import语句是否正确,确认包名无拼写错误
- 若项目包含Kotlin代码,需额外添加Kotlin编译输出到类路径,在classpath配置段添加
classpath += files(kotlin.javaClassesDirs)即可
内容的提问来源于stack exchange,提问作者VeceluXa
相关产品推荐
相关产品推荐

