无需发布至远程仓库,Gradle多模块项目如何提取构件详情
在Gradle中提取构件信息(无需发布到远程仓库)
1. 提取groupId、带扩展名的构件名
Gradle的JavaPlugin会为每个Java模块提供jar任务(若为WAR等其他类型构件,对应任务为war),无需发布即可通过命令行或自定义任务查询相关属性。
方式一:命令行查询单个模块
在根目录执行以下命令,替换:module-name为目标子模块路径(如:core):
./gradlew :module-name:properties -Porg.gradle.output.style=plain | grep -E "(group|name|version|archiveFileName)"
输出说明:
group对应Maven中的groupIdarchiveFileName是带扩展名的最终构件名(如core-1.0.0.jar)name和version分别为构件基础名与版本号
方式二:自定义任务批量输出所有模块信息
在根项目的build.gradle中添加以下任务:
task printModuleInfo { doLast { subprojects.each { subproject -> if (subproject.plugins.hasPlugin('java')) { def buildTask = subproject.tasks.findByName('jar') // 非Java模块可替换为war/ear等 println "===== 模块: ${subproject.path} =====" println "GroupId: ${subproject.group}" println "构件名(带扩展名): ${buildTask.archiveFileName.get()}" println "版本: ${subproject.version}" println "" } } } }
执行命令触发任务:
./gradlew printModuleInfo
2. 提取仓库信息
仓库配置可通过命令行快速查看,或自定义任务输出结构化信息。
方式一:命令行查询
./gradlew properties -Porg.gradle.output.style=plain | grep -A 10 "repositories"
该命令会输出根项目及所有子模块的仓库配置,适合快速核验。
方式二:自定义任务输出结构化仓库信息
在根项目的build.gradle中添加任务:
task printRepositories { doLast { println "===== 根项目仓库 =====" project.repositories.each { repo -> println "仓库类型: ${repo.getClass().simpleName}" println "仓库URL: ${repo.url}" println "" } subprojects.each { subproject -> println "===== 模块 ${subproject.path} 仓库 =====" subproject.repositories.each { repo -> println "仓库类型: ${repo.getClass().simpleName}" println "仓库URL: ${repo.url}" println "" } } } }
执行命令触发任务:
./gradlew printRepositories
任务会分别输出根项目与各子模块的仓库类型(如MavenCentral、MavenLocal)及对应URL。
补充说明
- 若项目使用版本目录(version catalog)或继承式仓库配置,上述方法仍能自动识别所有有效仓库信息。
- 所有操作仅依赖本地项目配置与Gradle任务属性,无需将构件发布到远程仓库。
内容的提问来源于stack exchange,提问作者user2242660
相关产品推荐
相关产品推荐

