Gradle 中如何正确打印本地文件系统 JAR 依赖的完整列表

发布时间 - 2025-12-27 00:00:00    点击率:

当使用 `filetree` 或 `files()` 声明本地 jar 依赖时,gradle 的 `dependencies` 任务默认不显示这些文件依赖;需通过自定义任务遍历 `configurations.*` 集合并显式输出路径或名称。

在 Gradle 中,通过 files()、fileTree() 等方式引入的本地文件依赖(即非坐标化依赖)不会被 ./gradlew :project:dependencies 任务识别为“依赖项”,因为它们不属于 Maven/Ivy 仓库体系,也不具备模块坐标(group:name:version),因此该任务仅展示传递性依赖图,对纯文件路径依赖返回 No dependencies。

要真正查看 infraLibs(或其他自定义 configuration)中实际包含的本地 JAR 文件,最直接有效的方式是定义一个专用的 Gradle 任务,手动遍历对应 configuration 的文件集合:

task printInfraLibs {
    doLast {
        configurations.infraLibs.resolvedConfiguration.files.each { file ->
            println "→ ${file.name} [${file.absolutePath}]"
        }
    }
}
✅ 推荐使用 resolvedConfiguration.files(而非 configurations.infraLibs.each),因为它确保所有依赖(包括嵌套 fileTree 和 files() 声明)均已解析完成,且返回的是 File 实例,可安全访问路径与名称。

执行命令:

./gradlew printInfraLibs

你将看到类似输出:

→ aspectjrt-1.9.20.jar [/path/to/lib/aspectj-1.9.20/aspectjrt-1.9.20.jar]
→ aspectjtools-1.9.20.jar [/path/to/lib/aspectj-1.9.20/aspectjtools-1.9.20.jar]
→ log4j-api-2.17.1.jar [/path/to/lib/log4j-2.17.1/log4j-api-2.17.1.jar]
→ commons-lang-2.6.jar [/path/to/lib/commons-lang-2.6/commons-lang-2.6.jar]
→ commons-beanutils.jar [/path/to/lib/commons-beanutils-1.9.4/commons-beanutils.jar]

⚠️ 注意事项:

  • 确保 infraLibs configuration 已正确定义(如 configurations.create("infraLibs")),并在 dependencies 块中正确赋值;
  • 若在 doLast 中直接访问 configurations.infraLibs.files,可能因延迟解析导致空结果;务必使用 resolvedConfiguration.files;
  • 在 Gradle 7.0+ 中,推荐使用 configurations.infraLibs.incoming.artifacts.files(面向新依赖管理 API),但对纯文件依赖兼容性仍以 resolvedConfiguration 最稳定;
  • 如需导出为文本文件,可在任务中追加:new File("infraLibs-deps.txt").text = configurations.infraLibs.resolvedConfiguration.files.join("\n")

总结:本地 JAR 不参与标准依赖图渲染,但可通过编程式遍历 resolvedConfiguration.files 完全可控地审计、验证和调试实际参与构建的二进制文件——这是处理离线/封闭环境项目的必备实践。


# maven  # gradle  # 遍历  # 推荐使用  # 自定义  # 的是  # 这是  # 离线  # 也不  # 并在  # 可在  # 或其他 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  微信h5制作网站有哪些,免费微信H5页面制作工具?  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  在线制作视频的网站有哪些,电脑如何制作视频短片?  千库网官网入口推荐 千库网设计创意平台入口  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  黑客入侵网站服务器的常见手法有哪些?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何获取上海专业网站定制建站电话?  中国移动官方网站首页入口 中国移动官网网页登录  如何快速搭建高效简练网站?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  如何用低价快速搭建高质量网站?  魔方云NAT建站如何实现端口转发?  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何在景安服务器上快速搭建个人网站?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何用免费手机建站系统零基础打造专业网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何快速打造个性化非模板自助建站?  lovemo网页版地址 lovemo官网手机登录  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  英语简历制作免费网站推荐,如何将简历翻译成英文?  香港服务器部署网站为何提示未备案?  MySQL查询结果复制到新表的方法(更新、插入)  Laravel怎么连接多个数据库_Laravel多数据库连接配置  浅谈redis在项目中的应用  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Android中AutoCompleteTextView自动提示  Laravel怎么实现验证码(Captcha)功能  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  JavaScript如何实现音频处理_Web Audio API如何工作?  Android实现代码画虚线边框背景效果  ,交易猫的商品怎么发布到网站上去?  如何用腾讯建站主机快速创建免费网站?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  LinuxCD持续部署教程_自动发布与回滚机制  网易LOFTER官网链接 老福特网页版登录地址  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  怎么用AI帮你设计一套个性化的手机App图标?