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

如何为Shadow Fat JAR生成无依赖的POM文件?

你的操作没错误,这是Shadow插件的默认行为

首先得说清楚:你完全没操作错!Shadow JAR插件的核心作用就是把所有依赖打包进Fat JAR,但它不会自动修改Gradle生成的POM文件——因为POM的生成是由Gradle的maven-publish插件负责的,默认逻辑就是把项目的所有依赖都写入POM,不管你是不是把依赖打包进了JAR里。

想要让生成的POM的<dependencies>部分为空,只需要在你的Gradle配置里修改POM的生成规则就行,具体步骤如下:

修改sub-app模块的build.gradle配置

确保你已经应用了maven-publish插件,然后在发布配置里关联Shadow生成的Fat JAR,并清空POM的依赖节点:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.15' // 替换成你的Spring Boot版本
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'com.github.johnrengelman.shadow' version '7.1.2' // 替换成你的Shadow版本
    id 'maven-publish'
}

// ... 其他项目配置(比如依赖、Shadow自定义规则等) ...

publishing {
    publications {
        shadow(MavenPublication) {
            // 指定发布的是Shadow生成的Fat JAR
            artifact shadowJar

            // 自定义POM生成逻辑,清空dependencies节点
            pom.withXml {
                def depsNode = asNode().get('dependencies')[0]
                if (depsNode) {
                    depsNode.children().removeAll()
                }
            }
        }
    }

    // 配置仓库路径为./dist,让生成的POM和JAR输出到这里
    repositories {
        maven {
            url = uri("$projectDir/dist")
        }
    }
}

// 让build任务依赖publish任务,确保执行build时生成修改后的POM和Fat JAR
build.dependsOn publish

验证效果

运行./gradlew sub-app:build之后,去./dist目录里查看生成的pom.xml,你会发现<dependencies>部分已经是空的了,同时Fat JAR也包含了所有依赖,完全满足你的需求。

另外补充一点:如果之前你是用默认的jar任务发布,一定要改成关联shadowJar,不然发布的还是普通JAR,即使POM空了也会导致运行时缺少依赖。

内容的提问来源于stack exchange,提问作者LagSurfer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:17:46