java-all-call-graph icon indicating copy to clipboard operation
java-all-call-graph copied to clipboard

关于 allowed_class_prefix.properties

Open Fioooooooo opened this issue 9 months ago • 4 comments

作者您好,我记得之前版本有这个配置文件 allowed_class_prefix.properties,或者构建 ConfigWrapper 时可以设置 OtherConfigFileUseSetEnum.OCFUSE_ALLOWED_CLASS_PREFIX 来指定需要解析的 package 或 class,最近版本好像找不到了。

现在有其他 api 可以代替这个功能吗?

Fioooooooo avatar Mar 06 '25 08:03 Fioooooooo

参考 https://github.com/Adrninistrator/java-all-call-graph/blob/main/change_log.md#1271-%E5%88%A0%E9%99%A4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

_jacg_config/allowed_class_prefix.properties
用于指定 java-callgraph2 解析类时需要处理的类名或包名前缀,以及 java-all-call-graph 在写入数据库时需要写入的类名或包名前缀

删除当前配置文件后,可以通过 java-callgraph2 组件提供的配置达到相同的控制效果

现在需要通过 JavaCG2ConfigureWrapper 来配置需要忽略哪些类,参考

https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/test/java/test/runbycodemain/Test1RunnerWriteDb.java

https://github.com/Adrninistrator/java-callgraph2/blob/main/src/test/java/test/parse/TestParseEl.java

Adrninistrator avatar Mar 06 '25 08:03 Adrninistrator

收到,感谢回复。

我目前使用 java-callgraph2 的版本是 3.0.5,以这种方式创建的 CG2 配置,期望是只解析 com.test 开头的 package,但是解析日志中看起来还是解析了其他 package,jacg 的 h2 数据库中也是保存了很多其他类。

不知道是这段配置有问题,还是需要 java-all-call-graph 的 ConfigurationWrapper 一起配置使用呢?

public JavaCG2ConfigureWrapper createJavaCG2ConfigureWrapper() {
        JavaCG2ConfigureWrapper javaCG2ConfigureWrapper = new JavaCG2ConfigureWrapper();
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_PARSE_METHOD_CALL_TYPE_VALUE, Boolean.TRUE.toString());
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_FIRST_PARSE_INIT_METHOD_TYPE, Boolean.TRUE.toString());
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_ANALYSE_FIELD_RELATIONSHIP, Boolean.TRUE.toString());
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_LOG_METHOD_SPEND_TIME, Boolean.TRUE.toString());
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_CONTINUE_WHEN_ERROR, Boolean.FALSE.toString());
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_OUTPUT_FILE_EXT, JavaCG2Constants.EXT_MD);
        javaCG2ConfigureWrapper.setMainConfig(JavaCG2ConfigKeyEnum.CKE_ANALYSE_FIELD_RELATIONSHIP, Boolean.TRUE.toString());

        // 解析的 jar 目录
        javaCG2ConfigureWrapper.setOtherConfigList(JavaCG2OtherConfigFileUseListEnum.OCFULE_JAR_DIR, resolverArgs.getJarPath());

        // 指定解析的 class
        // 语法文档:https://github.com/Adrninistrator/java-callgraph2/blob/main/src/main/resources/el_example.md
        javaCG2ConfigureWrapper.setElConfigText(JavaCG2ElConfigEnum.ECE_PARSE_IGNORE_METHOD_CALL_ER_EE,
                "!(string.startsWith(er_full_method, 'com.test')) || !(string.startsWith(ee_full_method, 'com.test'))"
        );
        
        return javaCG2ConfigureWrapper;
    }

Image

Fioooooooo avatar Mar 06 '25 10:03 Fioooooooo

看一下jar_info表,里面有导入时间,可能是因为指定的jar包没有变化,所有实际上没有重新解析入库,可以删掉这个表的数据重新执行试下

Adrninistrator avatar Mar 06 '25 11:03 Adrninistrator

了解了,感谢,现在的配置方式比 1.x 的时候灵活了不少

Fioooooooo avatar Mar 07 '25 02:03 Fioooooooo