You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Proguard的-injars参数是否支持正则表达式?

关于ProGuard -injars 参数是否支持正则表达式的解答

首先直接给你结论:ProGuard的-injars参数并不支持正则表达式,也不支持你尝试的?这类通配符写法。你遇到的No such file or directory错误,本质是ProGuard会把带通配符的字符串当作完整的文件名去查找,自然找不到对应文件。

为什么会这样?

ProGuard在处理-injars、-outjars这类路径参数时,只会识别标准的文件路径,或者非常有限的系统级通配符(比如部分系统下的*匹配目录下所有文件,但这是操作系统层面的匹配逻辑,不是正则,也没法实现你想要的版本号占位匹配)。它不会解析正则表达式,也不支持用?来匹配单个字符的版本号片段。

解决办法

针对你这种版本号动态变化的Jar包,有几个实用的方案:

  • 用构建工具动态传入路径
    如果你用Maven、Gradle这类构建工具,可以通过脚本逻辑动态定位目标Jar包,再把路径传递给ProGuard。比如Gradle里可以这么写:
    // 找到plugins目录下符合a.b_c_*.jar格式的唯一Jar包
    def targetJar = fileTree(dir: 'plugins').include('a.b.c_*.jar').singleFile
    proguard {
        injars targetJar
        // 其他ProGuard配置...
    }
    
  • 写脚本自动更新配置文件
    可以写个简单的Shell/Python脚本,先扫描plugins目录找到目标Jar包,再自动替换ProGuard配置里的-injars行。比如Shell脚本示例:
    # 找到目标Jar包的路径
    target_jar=$(find ./plugins -name "a.b.c_*.jar")
    # 替换配置文件中的-injars行
    sed -i "s/-injars .*/-injars $target_jar/" your-proguard-config.pro
    # 运行ProGuard
    proguard @your-proguard-config.pro
    
  • 统一Jar包文件名
    如果场景允许,在部署或构建环节把版本化的Jar包复制一份并重命名为固定名称(比如a.b.c.jar),这样ProGuard配置里直接写-injars \plugins\a.b.c.jar就可以彻底规避版本号变化的问题。

内容的提问来源于stack exchange,提问作者lifeline2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:05:43