如何从Jar包内的*.toml文件读取Version Catalog?
Gradle读取Jar包内版本目录文件的解决方案
直接读取Jar内的版本目录文件
Gradle本身支持直接从符合规范的Jar包中读取版本目录文件,无需手动提取。只要你的Jar包是按Maven/Gradle规范打包,内部包含版本目录文件(默认路径为gradle/libs.versions.toml),原有的配置逻辑其实已经可以工作——如果读取失败,大概率是Jar内的文件路径不符合默认约定,此时只需指定文件在Jar内的具体路径即可:
修改settings.gradle配置:
dependencyResolutionManagement { repositories { mavenLocal() } versionCatalogs { create("libs") { from("com.test:version-catalog:1.0.1-SNAPSHOT") { // 替换为Jar内实际的toml文件路径 artifactUrl = "META-INF/gradle/my-custom-catalog.toml" } } } }
手动提取Jar内指定文件的方法
如果确实需要将Jar内的toml文件提取出来单独使用,可以通过两种方式实现:
1. 用Gradle任务提取
在项目的build.gradle中添加如下任务:
task extractTomlFromJar(type: Copy) { // 从版本目录依赖对应的Jar包中读取内容 from zipTree(configurations.versionCatalogs.find { it.name.contains("version-catalog") }.singleFile) // 只提取toml文件,可根据需要修改匹配规则 include "**/*.toml" // 指定提取后的输出目录 into "$buildDir/extracted-toml" }
执行./gradlew extractTomlFromJar即可将文件提取到指定目录。
2. 用命令行工具提取
使用Java自带的jar命令直接提取:
# 替换为你的Jar包路径和目标文件路径 jar xf version-catalog-1.0.1-SNAPSHOT.jar gradle/libs.versions.toml
注意:优先使用Gradle原生的版本目录读取方式,手动提取仅适用于特殊场景,比如需要修改文件内容再使用的情况。
内容的提问来源于stack exchange,提问作者sge
相关产品推荐
相关产品推荐

