如何为java项目生成调用图

如何为java项目生成调用图,java,call-graph,Java,Call Graph,是否可以生成应用程序的全局调用图 基本上,我是在寻找应用程序中最重要的类 我正在寻找Java的选项 我尝试过Doxy Gen,但它只生成继承图 我当前的脚本: #! /bin/bash echo "digraph G {" find $1 -name \*.class | sed s/\\.class$// | while read x do javap -v $x | grep " = class" | sed "s%.*// *%\"$x\" -&g

是否可以生成应用程序的全局调用图

基本上,我是在寻找应用程序中最重要的类

我正在寻找Java的选项

我尝试过Doxy Gen,但它只生成继承图

我当前的脚本:

#! /bin/bash

echo "digraph G
{"
find $1 -name \*.class |
    sed s/\\.class$// |
    while read x
    do
        javap -v $x | grep " = class" | sed "s%.*// *%\"$x\" -> %" | sed "s/$1\///" | sed "s/-> \(.*\)$/-> \"\1\"/"
    done
echo "}"

对于高级代码分析,您可能想看看

干杯
托马斯


edit:根据一般请求移到这里,请参见:)

javap-v
和一些perl将获得类之间的依赖关系。您可以使解析器稍微复杂一些,并获得方法之间的依赖关系

更新:或者,如果您有*nix或cygwin,您可以得到一个依赖项列表,如下所示

find com/akshor/pjt33/image -name \*.class | sed s/\\.class$// | while read x do javap -v $x | grep " = class" | sed "s%.*// *%$x -> %" done 查找com/akshor/pjt33/image-name\*.class| sed s/\\.类$//| 读x的时候 做 javap-v$x | grep“=类“| sed”s%.*/*%$x->” 完成 添加页眉和页脚,您可以将其传递给dot以呈现图形。如果您只是想知道大多数其他类使用了哪些类,正如您的问题所暗示的,那么

find com/akshor/pjt33/image -name \*.class | sed s/\\.class$// | while read x do javap -v $x | grep " = class" | sed "s%.*// *%%" done | sort | uniq -c | sort -n 查找com/akshor/pjt33/image-name\*.class| sed s/\\.类$//| 读x的时候 做 javap-v$x | grep“=class”| sed“s%.*/*%%” 完成| 排序| uniq-c |排序-n
英雄联盟你打败了我(+1)我想你不明白OP在寻找什么。我看到了这个问题,但它不是我想要的。@Tiago和Moose呢?我用这个工具来分析工作中的项目。可能是“最重要”的重复,可能不是,但这可能会暴露出功能太多的类,我想。@Sean,这可能是一个重复的问题,但没有一个答案能解决它。@Peter我知道,这就是这个网站上“重复问题”的问题。但这是关闭复制品的政策。我不确定这是否有帮助。我对Perl几乎一无所知。我知道这很遗憾。@Tiago,你也可以在Java中读取输入并应用正则表达式,它只是比较冗长而已。我来试试这个。我猜这个命令将在
com/akshor/pjt33/image
中查找扩展名为
*.class
的文件,但它不应该是
*.java
?我的印象是
javap
命令将读取java文件而不是类文件。没关系。我差不多完成了,我正在根据我的需要调整你的bash脚本。@Peter:我得到了一些奇怪的符号,如[Z]和[B]。我已经添加了基于我的问题构建的脚本的当前版本。