zoukankan      html  css  js  c++  java
  • ref:如何在大量jar包中搜索特定字符

    ref:https://www.cnblogs.com/jiangxinnju/p/5137760.html?utm_source=tuicool&utm_medium=referral

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

    --------------------------------------------------

    如果在jar包只搜索文件名呢?例如搜索一个类文件在哪个jar包里面

    find foo/ -name "*.jar" | xargs grep Hello.class
    locate "*.jar" | xargs grep Hello.class//locate比find更快,其采用索引方式。

    find只搜索文件,不搜索目录:
    find . -type f -name '*.conf'

    --------------------------------------------------

    欢迎关注我的社交账号:

    博客园地址: 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进行搜索即可。

  • 相关阅读:
    LeetCode——Path Sum II
    注解配置 ssh
    冒泡排序深入具体解释
    在web page中使鼠标右击失效的几种方法
    XMPP个人信息展示
    android一个弹出菜单的动画(二)
    MySQL协议分析
    MySQL DBA教程:Mysql性能优化之缓存参数优化
    INSERT DELAYED 句法
    UDP包的最大大小是多少?
  • 原文地址:https://www.cnblogs.com/studyskill/p/9227269.html
Copyright © 2011-2022 走看看