Adrninistrator / java-all-call-graph

Generate all call graph for Java Code.
Apache License 2.0
437 stars 111 forks source link

新手问题 #68

Open Jianing163 opened 3 months ago

Jianing163 commented 3 months ago

我完全没看懂是怎么操作,是让我通过源码启动你这个项目呢 还是通过maven来添加这个 功能,还是说两者结合

Adrninistrator commented 3 months ago

都可以,是不同的方式

Jianing163 commented 3 months ago

意思是我在我的项目里 的pom文件添加这个maven。就可以了吗

com.github.adrninistrator java-all-call-graph 2.0.3 provided
    会报错:
    Could not find artifact com.github.adrninistrator:java-all-call-graph:provided:2.0.3 in huaweicloud (https://mirrors.huaweicloud.com/repository/maven/)

Try to run Maven import with -U flag (force update snapshots)

Jianing163 commented 3 months ago

1722943247560 我搞不定.... 有点笨

Adrninistrator commented 3 months ago

https://mirrors.huaweicloud.com/repository/maven/com/github/adrninistrator/java-all-call-graph/2.0.3/ 看起来是有的,或者换腾讯的仓库试下 http://mirrors.cloud.tencent.com/nexus/repository/maven-public/

Jianing163 commented 3 months ago

您看一下 上面的截图 我导入进去了 然后我启动我的项目 抱错呢

Adrninistrator commented 3 months ago

image 我找了一个Maven项目试了下,是可以引入相关组件的

Jianing163 commented 3 months ago

好了 大佬 然后怎么用哇,启动本地项目吗,我启动了就报错呢

Adrninistrator commented 3 months ago

报错是上面的截图吗,看起来和当前组件没有关系

Jianing163 commented 3 months ago
image

然后怎么使用呀 大佬

Adrninistrator commented 3 months ago

参考https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md 首先执行4.2. 释放启动类及配置文件 再执行4.3. 生成Java方法调用关系并写入数据库 按需要执行4.4、4.5 github的图片可能没有显示,gitee上的能显示

Jianing163 commented 3 months ago

https://github.com/user-attachments/assets/b1066b85-b85a-4d5a-bdd8-50482a49093a

是我哪里操作的不对吗 没有看到【需要选择classpath对应模块为test。】能配置的 地方

Adrninistrator commented 3 months ago
    <dependency>
      <groupId>com.github.adrninistrator</groupId>
      <artifactId>java-all-call-graph</artifactId>
      <version>2.0.3</version>
      <scope>test</scope>
    </dependency>

我试了一下,pom.xml里的依赖这样写就可以了,使用Gradle时才需要注意“需要选择classpath对应模块为test”

Jianing163 commented 3 months ago
image

我有两个问题 大佬,问题1 对应图中的1,我有test/java 但是没有往里面写,第二个问题就是 乱码...

Adrninistrator commented 3 months ago

1.当前项目根目录没有test/java目录,在ws-console-...目录中才有test/java目录,可以把执行时的当前目录修改为ws-console-... 2.文件编码是UTF-8,需要修改IDEA的文件编码

Jianing163 commented 3 months ago
image

大佬我又遇到问题了 ,方便加您个联系方式吗。一直这样问您感觉活在古代里 =-v-=

Jianing163 commented 3 months ago
image image

现在是没有“当出现方法循环调用时,会显示出现循环调用的方法,格式为“!cycle[x]!”这个标识了吗,现在我试了很多只有!no_callee!标识,有最新的文档吗 大佬

Jianing163 commented 3 months ago

大佬哇,数据库哪些表之间的关联关系有文档吗,

Jianing163 commented 3 months ago
image image

大佬 数据库中为什么现实的是实现关系,interface 继承interface,在数据库中显示实现关系 这个是为什么

Adrninistrator commented 3 months ago

大佬哇,数据库哪些表之间的关联关系有文档吗,

同名字段一般值是相同的,看需要查什么数据,其他关联的字段名字不同的很少

Adrninistrator commented 3 months ago

image image 大佬 数据库中为什么现实的是实现关系,interface 继承interface,在数据库中显示实现关系 这个是为什么

java代码编译成class以后就是这样,接口继承接口时属于实现关系

Jianing163 commented 3 months ago

大佬,怎么能一次性将一整个项目的调用关系写到数据库中呢,我现在只会一个模块一个模块的查看,我想串起来 怎么做呢

Adrninistrator commented 3 months ago

image image 现在是没有“当出现方法循环调用时,会显示出现循环调用的方法,格式为“!cycle[x]!”这个标识了吗,现在我试了很多只有!no_callee!标识,有最新的文档吗 大佬

参考https://github.com/Adrninistrator/java-all-call-graph/blob/main/how_to_use.md#2-%E9%80%9A%E8%BF%87%E6%BA%90%E7%A0%81%E5%90%AF%E5%8A%A8

首先执行gradlew test_gen_jar生成测试jar包

再分别执行 test.runbycode.TestRBC0RunnerWriteDb test.runbycode.TestRBCRunnerGenAllGraph4Caller

在生成的TestExtendComplex@test1@xxx.txt文件中会出现!cycle:

[6]#            [ChildClassB1:0]    test.callgraph.extendcomplex.AbstractSuperClassB:entryA !cycle[2]!
Adrninistrator commented 3 months ago

大佬,怎么能一次性将一整个项目的调用关系写到数据库中呢,我现在只会一个模块一个模块的查看,我想串起来 怎么做呢

把需要分析的jar包都添加到配置文件_jacg_config\jar_dir.properties中,或者把jar包所在目录写进去

Jianing163 commented 3 months ago

啊?大佬 我是maven项目,我进入了maven的工程,我还需要gradlew test_gen_jar吗?

Adrninistrator commented 3 months ago

啊?大佬 我是maven项目,我进入了maven的工程,我还需要gradlew test_gen_jar吗?

当前项目是使用gralde构建,上面的命令用来编译测试代码生成jar包,如果要使用maven的话需要新写一个编译测试代码的任务

Jianing163 commented 3 months ago

我没太明白 什么意思,我的疑虑就是:我现在是maven项目,我想用您写的这个代码 然后看一下我这个项目的个个调用情况,我只导入以下maven包的话 并不能满足我的需求吗?

com.github.adrninistrator
  <artifactId>java-all-call-graph</artifactId>
  <version>2.0.3</version>
  <scope>test</scope>
</dependency>
2:第二个就是 我现在的项目是一个父project项目 的<packaging>pom</packaging>是pom形式,下面有很多个模块 基本是都是jar包,我是要在父poject中的pom文件中导入以上maven工程 然后在jar_dir.properties中加入它下面的多个jar包 然后运行就可以了吗 
Adrninistrator commented 3 months ago

上面说的gradlew test_gen_jar,是针对你提出的问题没有找到!cycle,如果不关心这个就不用处理

Adrninistrator commented 3 months ago

2:第二个就是 我现在的项目是一个父project项目 的pom是pom形式,下面有很多个模块 基本是都是jar包,我是要在父poject中的pom文件中导入以上maven工程 然后在jar_dir.properties中加入它下面的多个jar包 然后运行就可以了吗

上面有说了,加到配置文件就可以,再执行写数据库的类

Jianing163 commented 3 months ago
image

是这样的大佬,我把maven父工程中添加了,然后我执行TestRunnerWriteDb 就会有这个报错

image

我设置以上信息后报错如下:

image
Adrninistrator commented 3 months ago

log4j2没配置,日志没打印出来,项目里有lo4gj2的示例文件 正常执行时会打印当前使用的配置文件的路径

2024-08-07 20:22:58.485 [main] INFO  ConfigureWrapper.<init>(123) - 使用配置文件中的参数
2024-08-07 20:22:58.565 [main] INFO  JavaCGFileUtil.findFile(209) - 从classpath中获取文件 file:/D:/java-all-call-graph/out/test/resources/_jacg_config/config.properties
Adrninistrator commented 3 months ago

我在Maven项目试了一下是正常的,读取的配置文件路径不同,读取的是target/test-classes/_jacg_config目录,文件来源是从src\test\resources_jacg_config目录的配置文件自动拷贝过来的

2024-08-07 20:33:35.723 [main] INFO  ConfigureWrapper.<init>(123) - 使用配置文件中的参数
2024-08-07 20:33:35.777 [main] INFO  JavaCGFileUtil.findFile(209) - 从classpath中获取文件 file:/D:/target/test-classes/_jacg_config/config.properties
Jianing163 commented 3 months ago

你试的maven项目是在父工程的试的吗?,我在我的父工程一直不成功。。。

Adrninistrator commented 3 months ago

我没有用maven的父工程,只有一层结构的工程 上面日志会显示当前读取的配置文件路径,去看下对应文件的内容有没有值

Jianing163 commented 3 months ago

单个模块 我已经成功了,我是想看整个工程的结构.. 为什么有这个想法呢 ,因为您支持多个jar包,我在我的A模块中 添加了A.jar和B.jar之后,我执行保存到数据库中的文件,我去查看数据库里只有B.jar的信息,我看您控制台打印的日志中,会清除数据库中的数据然后再添加, 所以有问题了之后 我在想通过父工程试试看,结果父工程一直都运行不了

Adrninistrator commented 3 months ago

不需要把这个组件添加到maven的父工程,需要解析的jar包在jar_dir.properties配置文件里指定,分析任意位置的jar包或者class文件所在目录都可以

Jianing163 commented 3 months ago

对不起 您不用试了 我没有刷新数据库, 我现在试了一下是完美的,感谢您

Adrninistrator commented 3 months ago

好的,能满足要求就好

Jianing163 commented 3 months ago

允许我斗胆再问一下,我想梳理您建立的这些48张表的关系,您有写文档说明吗,类似于 A表通过b_id与B表进行关联, 因为我想看一下您的那个向上和向下的树形数据都是获取的哪些表以及字段。

Adrninistrator commented 3 months ago

方法调用关系涉及的表不多,主要在method_call表里

Jianing163 commented 3 months ago

明白了 感谢您无私的贡献 谢谢您

Jianing163 commented 3 months ago

大佬 我又来了,您的那个java-all-call-graph这个项目 gradle的版本是多少版本的呢,jdk是多少版本的呢,

Adrninistrator commented 3 months ago

gradle wrapper 7.5.1 JDK 1.8 在项目的的gradle配置文件能看出来,查看方法可以通过gpt查询