Java源代码依赖关系图

标签 java programming-languages module dependencies

嗯,首先,这可能是愚蠢和疯狂的。

我正在尝试构建(或使用,如果已经存在的话)一个框架,它接收许多 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/

相关文章:

java - 改变mp3的比特率

java - 尝试创建 Google Cloud Module 时的 Android Studio 1.3 Beta 1 错误

c - 有谁知道检查简单缩进规则的软件

sql - SQL 甚至 TSQL 图灵完备吗?

C# 如何循环遍历 Properties.Settings.Default.Properties 更改值

module - 文件 "<string>",第 6 行,在 <模块> 中 ImportError : No module named Crypto. 密码

python - 如何在 Python 3 中迭代模块列表并调用它们的方法

java - 错误 : Gradle: execution failed for task ':app:preDexDebug'

java - 如何在Java中的所有线程中维护List的单个副本

java - 基于 JDBC 的工具来导入/导出数据库模式