Gradle多子项目配置:发布Shadow Jar与聚合Javadoc
Gradle多子项目发布配置优化
一、确保Shadow Jar作为主Jar发布
(以下为标准配置,可验证你已实现的逻辑是否规范)
在子项目的build.gradle.kts中配置shadowJar及发布任务:
plugins { id("com.github.johnrengelman.shadow") version "7.1.2" // 替换为适配项目的最新版本 `maven-publish` } // 配置Shadow Jar为无后缀主Jar shadowJar { archiveClassifier.set("") // 移除默认的"-all"后缀 // 按需添加合并策略、排除冗余文件等Shadow配置 } // 发布时用Shadow Jar替代默认Jar publishing { publications { create<MavenPublication>("mavenJava") { from(components["java"]) artifact(shadowJar) { classifier = "" } } } } // 绑定publish任务与shadowJar任务 tasks.named("publish") { dependsOn(tasks.shadowJar) }
二、优化聚合Javadoc Jar:仅处理项目源码,依赖类跳转外部文档
核心优化:禁止Javadoc任务处理依赖源码,通过配置外部链接直接跳转至依赖官方Javadoc,彻底消除依赖文档生成的耗时。
1. 根项目配置聚合Javadoc任务
在根项目的build.gradle.kts中添加以下配置:
plugins { `maven-publish` } // 注册聚合Javadoc任务(适配Java项目) val aggregateJavadoc by tasks.registering(Javadoc::class) { // 收集所有子项目的源码 source(subprojects.flatMap { it.tasks.named<Javadoc>("javadoc").get().source }) // 配置类路径为所有子项目的编译类路径 classpath = files(subprojects.flatMap { it.tasks.named<JavaCompile>("compileJava").get().classpath }) options { // 禁止下载依赖的源码与Javadoc,避免耗时操作 isDownloadJavadoc = false isDownloadSources = false // 添加依赖的官方Javadoc链接,按需补充项目依赖的其他库 links( "https://docs.oracle.com/en/java/javase/17/docs/api/", "https://kotlinlang.org/api/latest/jvm/stdlib/", "https://docs.spring.io/spring-framework/docs/current/javadoc-api/" ) // 基础Javadoc配置 encoding = "UTF-8" title = "项目聚合API文档" } // 排除非项目源码文件 exclude("**/dependency-src/**") } // 注册聚合Javadoc Jar任务 val aggregateJavadocJar by tasks.registering(Jar::class) { archiveClassifier.set("javadoc") from(aggregateJavadoc) } // 将聚合Javadoc Jar加入发布产物 publishing { publications { // 若需与主Jar同发布,可合并到mavenJava publication中 create<MavenPublication>("mavenAggregate") { artifact(aggregateJavadocJar) } } } // 绑定publish任务与聚合Javadoc Jar任务 tasks.named("publish") { dependsOn(aggregateJavadocJar) }
2. 子项目Javadoc配置优化
在子项目的build.gradle.kts中补充配置,确保子项目自身Javadoc任务也遵循优化规则:
tasks.javadoc { options { isDownloadJavadoc = false isDownloadSources = false links( "https://docs.oracle.com/en/java/javase/17/docs/api/", "https://kotlinlang.org/api/latest/jvm/stdlib/" ) } }
关键优化点说明
- 关闭依赖下载:
isDownloadJavadoc和isDownloadSources设为false,避免Gradle自动拉取依赖源码,直接减少大量网络IO与处理耗时。 - 外部链接跳转:通过
links配置依赖的官方Javadoc地址,用户查看文档时点击依赖类会直接跳转至官方页面,无需本地生成。 - 仅处理项目源码:聚合任务仅收集子项目自身源码,不涉及任何依赖类的文档生成逻辑。
验证执行
运行命令测试效果:
gradle publishToMavenLocal
检查本地Maven仓库产物:
- 主Jar为无后缀的Shadow Jar;
- 聚合Javadoc Jar仅包含项目自身类的文档,依赖类的链接均指向外部官方地址。
内容的提问来源于stack exchange,提问作者tetratheta
相关产品推荐
相关产品推荐

