根据关键字查找xxx-sources.jar中的文件
分类:软件编程
阅读:15
作者:皇太极
发布:2019-10-09 09:45:22

我们在编写代码时经常会遇到知道某个参数键,但是却不知道这个参数是在哪里被赋值的?
问题场景 https://github.com/majinding/webservice/issues/10
开发工具也无法搜索到jar包中的内容.(目前我不知道如何查找,如果有更好的查找方式,请告诉我)

示例: 比如我要查找 有一个header中填充了 “jaxrs.template.parameters”这个参数值,我想知道这个值是在哪里进行set的?

根据关键字查找在xxx-sources.jar中的文件

实现方式: 将jar文件(源代码)加载到内存中,再进行字符匹配查找

  1. /**
  2. * 在jar文件中搜索内容(仅限xxx-sources.jar)
  3. *
  4. * @param jfInst jar文件
  5. * @param searchString 搜索内容
  6. */
  7. public static void searchContent(JarFile jfInst, String searchString) {
  8. Enumeration enumEntry = jfInst.entries();
  9. while (enumEntry.hasMoreElements()) {
  10. JarEntry jarEntry = (JarEntry) enumEntry.nextElement();
  11. try {
  12. InputStream ins = jfInst.getInputStream(jarEntry);
  13. BufferedReader br = new BufferedReader(new InputStreamReader(ins));
  14. String line;
  15. int lineNumber = 0;
  16. while ((line = br.readLine()) != null) {
  17. ++lineNumber;
  18. if (line.contains(searchString)) {
  19. System.out.println(jarEntry + "\t" + lineNumber);
  20. }
  21. }
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

使用方式: 指定xxx-sources.jar文件,和查找关键字

  1. @Test
  2. public void search() throws IOException {
  3. JarFile jarFile = new JarFile("/maven/repos/org/apache/cxf/cxf-rt-frontend-jaxrs/3.1.3/cxf-rt-frontend-jaxrs-3.1.3-sources.jar");
  4. Decompression.searchContent(jarFile,"jaxrs.template.parameters");
  5. }

查找结果如下: 路径+行号