2011-02-11 48 views
3

是否可以生成應用程序的全局調用圖?如何爲java項目生成調用圖

基本上我試圖找到應用程序的最重要的類。

我在尋找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 "}" 
+0

可能重複[如何生成Java調用圖](http://stackoverflow.com/questions/1982890/how-to-generate-a-java-call-graph) – 2011-02-11 21:42:34

+0

「最重要的」,可能不是,但是這可能會暴露具有太多功能的類,我想。 – 2011-02-11 21:43:33

+2

@Sean,它可能是一個重複的*問題*,但沒有*答案*在那裏解決它。 – 2011-02-11 21:46:59

回答

2

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 

添加頁眉和頁腳,你可以通過它來點綴渲染圖。如果你只是想知道哪些類是由多數其他類使用,因爲你的問題暗示,然後

 
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