如何为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
相关产品推荐
相关产品推荐

