You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:15:36