Adrninistrator
                                            Adrninistrator
                                        
                                    >  在cmd下执行java命令 是用Maven编译的jar包来执行的吗,这样可能是不行的,需要的资源文件应该没生成在jar包里 下载下面两个jar包 ``` https://repo1.maven.org/maven2/com/github/adrninistrator/java-all-call-graph/0.7.5/java-all-call-graph-0.7.5.jar https://repo1.maven.org/maven2/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar ``` 执行下面的命令,文件能正常释放出来 ``` java -cp .;java-all-call-graph-0.7.5.jar;commons-io-2.8.0.jar com.adrninistrator.jacg.unzip.UnzipFile ```
在这个里面有讨论 [https://github.com/Adrninistrator/java-all-call-graph/issues/8](https://github.com/Adrninistrator/java-all-call-graph/issues/8) 图形化展示现在还没找到比较好的方式,如果需要搜索的话,txt格式反倒方便一点 如果需要获取某两个方法之间的调用链的话,可以参考[https://github.com/Adrninistrator/java-all-call-graph/blob/main/other_functions.md#12-%E7%94%9F%E6%88%90%E5%8C%85%E5%90%AB%E5%85%B3%E9%94%AE%E5%AD%97%E7%9A%84%E6%89%80%E6%9C%89%E6%96%B9%E6%B3%95%E5%88%B0%E8%B5%B7%E5%A7%8B%E6%96%B9%E6%B3%95%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B0%83%E7%94%A8%E9%93%BE](https://github.com/Adrninistrator/java-all-call-graph/blob/main/other_functions.md#12-%E7%94%9F%E6%88%90%E5%8C%85%E5%90%AB%E5%85%B3%E9%94%AE%E5%AD%97%E7%9A%84%E6%89%80%E6%9C%89%E6%96%B9%E6%B3%95%E5%88%B0%E8%B5%B7%E5%A7%8B%E6%96%B9%E6%B3%95%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B0%83%E7%94%A8%E9%93%BE),“生成包含关键字的所有方法到起始方法之间的调用链”的说明处理一下
> TestRunnerGenAllGraph4Caller执行完没有看到生成的输出结果,执行过程也没有任何打印输出,应该怎么定位? 看一下log4j的配置哈,是不是生成到其他的文件里了,需不需要调整下输出方式和级别
指定接口的方法是可以往下找调用链的,是不是接口所在的jar包没有指定到参数里
如果是用的H2数据库的话,执行这个SQL查询看一下有没有相关的调用关系 ```sql SELECT * FROM "jacg"."method_call_xxx" where "caller_class_name"='xxx' or "callee_class_name"='xxx'; ``` 如果是用MySQL的话,双引号要去掉一下
> 这个H2的本地文件怎么访问?默认的访问端口是多少? 这里有写哈 [https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md#133-%E7%94%9F%E6%88%90java%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%85%B3%E7%B3%BB%E5%B9%B6%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93 ](https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md#133-%E7%94%9F%E6%88%90java%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%85%B3%E7%B3%BB%E5%B9%B6%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93 ) ``` H2数据库使用说明可参考https://blog.csdn.net/a82514921/article/details/108029222 本工具生成的H2数据库中,schema为“jacg” ``` 在执行TestRunnerWriteDb类之后,会显示“可用于连接H2数据库的JDBC URL” 如果不使用H2数据库,也可以使用MySQL数据库,查询数据会相对方便一点
需要看一下指定的需要解析的jar包所在目录下,有一个xxx.jar.txt文件,在里面搜索一下接口类名,看有没有接口方法调用实现类方法的信息 正常情况下应该会有的,会生成接口方法调用实现类方法的调用关系 再看一下接口和实现类的方法定义
检索每个函数的入参信息,如果是指方法定义里的参数类型的话,可以参考 [https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md](https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md) ``` call.graph.output.detail:输出文件中调用关系的详细程度,1: 最详细,包含完整类名+方法名+方法参数,2: 中等,包含完整类名+方法名,3: 最简单,包含简单类名(对于同名类展示完整类名)+方法名 ``` 把call.graph.output.detail设置成1,输出结果里会显示方法的参数类型 如果是指调用方法时实际指定的参数类型,这个功能还在实现中,要过一段时间
上面的问题在0.7.5版本应该修复了,麻烦看一下现在用的版本是不是这个
执行以下sql,获得有重复注解的方法信息 ```sql select caller_full_method from method_call_alarmnotification where caller_method_hash='Ae7c7llX9FT0rTwh5zibYg#06b' limit 1; select callee_full_method from method_call_alarmnotification where callee_method_hash='Ae7c7llX9FT0rTwh5zibYg#06b' limit 1; ``` 在指定的jar包列表的第一个目录或文件所在目录,查看生成的xxx-annotation.txt,根据以上方法信息搜索,检查一下shade.kotlin.SinceKotlin注解信息是不是有多条