Gradle多模块项目:如何获取打包至WAR的依赖及版本信息
在Gradle多模块项目中打印WAR包依赖的详细信息
嗨,我刚好折腾过类似的需求,在多模块Gradle项目里要揪出所有会被打包进WAR包的依赖(包括groupId、artifactId和版本),这里有两种实用的方案,你可以根据需求选:
方案一:用Gradle自带任务+过滤快速查看
Gradle的dependencies任务本身就能列出指定配置的依赖,而WAR插件默认会用warRuntimeClasspath配置来管理要打包到WEB-INF/lib的依赖。
单模块快速查看
如果你只需要看某个特定WAR模块的依赖,直接运行:
./gradlew :your-war-module-name:dependencies --configuration warRuntimeClasspath
但默认输出会有很多层级和冗余信息,你可以用过滤命令只提取核心的依赖坐标:
# Linux/macOS 下用grep过滤 ./gradlew :your-war-module-name:dependencies --configuration warRuntimeClasspath | grep -E "([a-zA-Z0-9\-\.]+):([a-zA-Z0-9\-\.]+):([0-9a-zA-Z\-\.\-]+)" # Windows CMD 下用findstr过滤 ./gradlew :your-war-module-name:dependencies --configuration warRuntimeClasspath | findstr /r "[a-zA-Z0-9\-\.]*:[a-zA-Z0-9\-\.]*:[0-9a-zA-Z\-\.]*"
如果只想看直接依赖(排除传递依赖),加上--exclude-transitive参数即可:
./gradlew :your-war-module-name:dependencies --configuration warRuntimeClasspath --exclude-transitive
方案二:自定义Gradle任务,批量处理多模块
如果你的项目有多个WAR模块,自定义任务会更高效,还能输出规整的格式。在根项目的build.gradle(Groovy版本,Kotlin版逻辑类似)中添加以下代码:
task listWarDependencies { doLast { // 自动找到所有应用了WAR插件的子模块 def warProjects = subprojects.findAll { project -> project.plugins.hasPlugin('war') } warProjects.each { project -> println "=== 模块 ${project.name} 的WAR打包依赖 ===" // 解析并获取最终要打包的依赖(包括传递依赖) project.configurations.warRuntimeClasspath.resolvedConfiguration.resolvedArtifacts.each { artifact -> def moduleId = artifact.moduleVersion.id println "${moduleId.group}:${moduleId.name}:${moduleId.version}" } println "\n" // 模块间空行分隔,更易读 } } }
添加完成后,运行以下命令就能一次性输出所有WAR模块的依赖信息:
./gradlew listWarDependencies
额外说明
- 如果你的项目有自定义的依赖配置(比如某些依赖只在生产环境打包),只需要把代码里的
warRuntimeClasspath换成你对应的配置名称即可。 - 如果你只想输出直接依赖,可以把
resolvedArtifacts部分换成遍历project.dependencies.warRuntimeClasspath,但注意动态版本(比如1.+')需要通过resolvedConfiguration才能拿到最终解析后的版本号。
内容的提问来源于stack exchange,提问作者Ryanqy
相关产品推荐
相关产品推荐

