Gradle打包生成dependencies.xml详解
在 Gradle 打包时生成dependencies.xml文件可以通过创建一个自定义的 Gradle 任务来实现。该任务的核心是收集项目的依赖信息并将其以 XML 格式写入文件。以下是两种主流方案方案一使用内置的dependencies报告任务推荐Gradle 内置了生成依赖报告的功能我们可以配置一个自定义任务来生成 XML 格式的报告。在build.gradle中添加自定义任务// 定义一个生成 dependencies.xml 的任务 tasks.register(generateDependenciesXml) { group reporting // 将任务分组到 reporting 下便于管理 description Generates an XML file containing project dependencies. // 指定任务在项目评估完成后执行以确保依赖图已解析 doLast { // 获取项目的所有配置如 implementation, testImplementation 等 def configurations project.configurations // 创建一个 XML 文档结构 def xmlOutput new groovy.xml.MarkupBuilder(new FileWriter(${buildDir}/dependencies.xml)) xmlOutput.dependencies { configurations.each { config - // 过滤掉非可解析的配置避免错误 if (config.canBeResolved) { try { config.resolvedConfiguration.resolvedArtifacts.each { artifact - dependency { groupId(artifact.moduleVersion.id.group) artifactId(artifact.name) version(artifact.moduleVersion.id.version) configuration(config.name) classifier(artifact.classifier ?: ) type(artifact.extension) } } } catch (Exception e) { // 某些配置可能无法解析例如 detachedConfiguration这里忽略错误 project.logger.info(无法解析配置 ${config.name} 的依赖: ${e.message}) } } } } println 依赖文件已生成: ${buildDir}/dependencies.xml } } // 将生成依赖文件的任务关联到 assemble 任务使得每次打包时自动执行 tasks.named(assemble) { dependsOn tasks.named(generateDependenciesXml) }执行任务单独生成依赖文件./gradlew generateDependenciesXml执行打包如jar时由于assemble依赖了该任务dependencies.xml会自动生成在build/目录下。方案二集成 Maven 的dependency:tree目标适用于混合项目如果你的项目同时支持 Maven或者你需要与 Maven 格式完全兼容的dependencies.xml可以使用maven插件。应用 Maven 插件并添加自定义任务// 应用 Maven 插件 apply plugin: maven // 自定义任务调用 Maven 的 dependency:tree 并输出为 XML tasks.register(generateMavenDependencyTreeXml) { group reporting description Generates Maven-style dependency tree in XML format using maven-dependency-plugin. doLast { // 执行 Maven 目标。这需要本地已安装 Maven 且项目根目录有可用的 pom.xml。 // 注意这是一种变通方法并非纯 Gradle 方式。 exec { workingDir project.rootDir commandLine mvn, dependency:tree, -DoutputFiledependencies.xml, -DoutputTypexml } // 将生成的文件移动到 build 目录 ant.move(file: ${project.rootDir}/dependencies.xml, tofile: ${buildDir}/dependencies.xml) println Maven 格式依赖文件已生成: ${buildDir}/dependencies.xml } }注意此方案依赖于外部 Maven 命令和pom.xml文件通常仅在需要与现有 Maven 工具链兼容时使用。方案对比特性方案一纯 Gradle方案二Maven 集成原理利用 Gradle 的配置 API 直接解析依赖图并生成 XML 。调用外部 Maven 命令dependency:tree生成报告。兼容性纯 Gradle 项目无需其他工具。需要本地安装 Maven 并存在pom.xml。输出格式自定义 XML 结构可灵活定义节点。标准的 Mavendependency:treeXML 格式。集成度高与 Gradle 构建生命周期无缝集成。低依赖于外部进程。推荐场景绝大多数 Gradle 项目希望自动化生成依赖清单。需要与下游 Maven 工具链保持格式严格一致的项目。关键配置解析configurations代表项目的依赖配置集合如implementation,compileOnly,runtimeOnly等。canBeResolved用于过滤掉那些仅用于声明依赖而不用于解析的配置如compileClasspath是可解析的而compileOnly在旧版本中可能不可解析。resolvedConfiguration.resolvedArtifacts获取已解析的依赖构件列表包含组、名称、版本等详细信息 。任务依赖 (dependsOn)通过assemble.dependsOn generateDependenciesXml确保打包前生成依赖文件实现自动化 。参考来源Gradle 自动打包JAR文件gradle批量打包脚本总结Gradle新手必看build.gradle文件中的plugins、repositories、dependencies标签全解析Gradle的使用——dependencies的使用说明IDEA使用Gradle构建SpringBoot项目工程