• 如何在大量jar包中搜索特定字符


    欢迎关注我的社交账号:

    博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
    GitHub地址: https://github.com/jiangxincode
    知乎地址: https://www.zhihu.com/people/jiangxinnju
    邮箱: jiangxinnju@163.com

    工作中定位某些问题时需要在jar包中搜索某些特定的字符。如果jar包数量比较少可以直接使用JD-GUI等反编译软件导出源码,但是如果jar包数目庞大,这种方式工作量就太大了。

    现在介绍一种相对简单的方法,这种方式需要三种工具:

    • 能够批量解压jar包的程序,比如WinRAR。
    • 能够批量反编译jar包或者class文件的程序,比如jad(jd不支持命令行)。
    • 能够批量搜索文本文件的工具,比如FileLocator。

    具体步骤:

    假如需要在D:jar目录中的所有jar包中搜索Calendar一词:

    首先需要利用WinRAR将所有jar包解压到独立的目录中:

    打开命令行窗口,进入D:jar目录,输入下面命令(假设jad工具已经在path中设置):

        jad -o -r -sjava -dsrc ./**/*.class
    

    会发现在该目录多了一个src目录。
    注:反编译输出中经常会出现类似于The class file version is 49.0 (only 45.3, 46.0 and 47.0 are supported)的内容,说明jad只能编译49.0以下版本的class文件,虽然可以生成java文件,但是并没有正确反编译,如果大家知道其他可以在命令行执行,且不会出现类似问题的反编译工具可以告诉我。当然有一个比较折中的办法是使用我写的一个批量修改class文件版本号的小程序(通过邮件与我联系),通过修改版本号将class文件伪装成低版本的,供jad读取,但是这种方式不支持高版本的特性,比如拉姆达表达式。

    然后使用FileLocator进行搜索即可。

  • 相关阅读:
    mac 个人账户环境变量位置
    版本控制工具Git
    xmind导图用例转换为表格用例
    Mysql清空表(truncate)与删除表中数据(delete)的区别
    log4j日志级别及使用规范
    洛谷 P3807 【模板】卢卡斯定理
    jmeter环境配置与java环境配置
    NOI2020乱搞记
    Re:ゼロから始める文化課生活
    阅读书单
  • 原文地址:https://www.cnblogs.com/jiangxinnju/p/5137760.html
Copyright © 2020-2023  润新知