嗯,首先,这可能是愚蠢和疯狂的。
我正在尝试构建(或使用,如果已经存在的话)一个框架,它接收许多 Java 源文件并输出这些文件交互的方式;例如,file1.java 可以导入 file2.java; file2.java 可以调用 file3.java 的static 方法。如果这可以在不编译或运行文件集的情况下完成,那将是非常棒的。我知道 Reflection API 允许我探索类的各个部分,但这是我要找的东西吗?
此外,将其扩展到其他语言有多难,例如 Python 或 Lisp(在此处添加任何其他语言)?
我不太确定如何构建问题标题,所以如果以前有人问过这样的问题,如果你能将我链接到那个问题,我会很高兴。
最佳答案
我目前正在做一个项目,主要功能和你说的非常相似,我使用javaparser:http://code.google.com/p/javaparser/
javaparser非常强大,它可以在源代码分析中帮助我们很多,但是即使我使用javaparser也很难得到完整的依赖和类交互。
例如: 如果你想获取一个类的所有依赖,最直接的方法是获取源代码的“导入”区域——使用javaparser很容易。
但是仅仅“导入”是不够的,如果你当前分析的类——ClassA——调用了一个类——ClassB——与ClassA在同一个包中,那么ClassB就不会出现在导入区。
所以在这种情况下,我们无法获取ClassB依赖。
而对于类的交互,如果你不能100%的得到一个类的正确的依赖,那么你就不能100%的知道类之间的正确的交互。
但无论如何,到目前为止,javaparser 是我能找到的最强大、最有用的 java 源代码分析工具。
关于Java源代码依赖关系图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322018/