如何配置Gradle将JavaDocs生成到项目根目录指定路径?
解决Gradle子模块中Javadoc输出目录配置问题
问题场景
项目目录结构如下:
/projectRoot /lib /build/docs/javaDocs <--- Javadoc默认生成路径 build.gradle /docs <---- 期望的Javadoc输出目录
build.gradle位于projectRoot/lib子目录中,需要将Javadoc生成到项目根目录下的docs文件夹,但尝试以下配置后未达到预期(要么无文件生成,要么生成到项目目录外):
tasks.withType(Javadoc).configureEach { exclude ('com/nest/egg/**') options.addStringOption("charset", "utf-8") options.addStringOption("docencoding", "utf-8") options.addStringOption("encoding", "utf-8") destinationDir = reporting.file("docs") // 也尝试过"/docs"、"docs/" }
解决方案
问题出在路径定位基准错误:reporting.file()基于当前子模块的报告目录(即lib/build/reports)解析路径,绝对路径/docs会指向系统根目录,均不符合需求。正确做法是基于项目根目录定位目标文件夹:
方法1:使用rootProject.file()(推荐)
tasks.withType(Javadoc).configureEach { exclude ('com/nest/egg/**') options.addStringOption("charset", "utf-8") options.addStringOption("docencoding", "utf-8") options.addStringOption("encoding", "utf-8") // 直接基于根项目定位docs目录 destinationDir = rootProject.file("docs") // 可选:提前创建目标目录,避免生成失败 doFirst { destinationDir.mkdirs() } }
方法2:通过rootProject.projectDir拼接路径
tasks.withType(Javadoc).configureEach { exclude ('com/nest/egg/**') options.addStringOption("charset", "utf-8") options.addStringOption("docencoding", "utf-8") options.addStringOption("encoding", "utf-8") destinationDir = file("${rootProject.projectDir}/docs") doFirst { destinationDir.mkdirs() } }
说明
rootProject指向项目根目录的Project实例,rootProject.file("docs")会自动解析为projectRoot/docs,不受当前build.gradle所在子模块的影响。- 添加
doFirst { destinationDir.mkdirs() }可确保目标目录提前创建,避免因目录不存在导致Javadoc任务执行失败。
内容的提问来源于stack exchange,提问作者Jelatinone
相关产品推荐
相关产品推荐

