2010-07-20 78 views
5

我有一個jar文件。我想知道哪些外部類和方法被JAR文件中的類使用。任何人都可以提供我任何工具?如何知道給定的jar文件使用哪個類/包/方法?

例如 - 如果下面兩個類被打包成Myjar.jar

import java.util.Vector; 
class MyJarClass{ 

    public static void main(String args[]){ 
     Vector v = new Vector(); 
     AnotherClass another = new AnotherClass(); 

     v.addElement("one"); 
     another.doSomething(); 

    } 
} 

class AnotherClass{ 

    void doSomething(){ 
    } 
} 

當我提供該JAR到工具 - 該工具應該顯示java.util.VectorVector.adElements()是從外部源(未存在於MyJar.jar

忘了提及,我無法訪問源代碼。

回答

4

import com.example.*; 

可能

List<com.example.MyType> = new ArrayList<com.example.MyType>(); 

的挑戰

Class<?> clazz = Class.forName("com.example.MyType"); 

碟中諜

List<String> classes = getClassNamesFromUrl("http://example.com/classes.txt"); 
for (String className:classes) { 
    doSomethingWith(Class.forName(className)); 
} 

我支持喬恩的意見,看看字節碼(BCEL),但只是知道,這在總體上是不可能從一個罐子裏讀出所有的依賴,因爲他們可以是動態的,定義在圖書館外(見:不可能的任務)。


很難說,如果有一個工具,來看看這些目錄上java-source.net

更多讀物

+0

我想用J2ME應用程序試試這個。 「可能」的情況對我來說已經足夠了。任何工具? – anupsth 2010-07-20 07:29:59

+0

+1爲好例子。 「不可能的任務」很整潔。 – 2010-07-20 07:34:37

+0

我想創建一個插件系統,該插件允許插件的功能有限。所以限制不是排除在外,而是允許的類和方法可以列出。除了簡單的類型之外,JAR中定義的集合和類都不能使用,甚至不能使用Class來避免反射技巧。檢查包含插件的JAR或插件的源代碼的最佳方法是什麼? – 2013-01-15 10:30:58

3

你可能想看看BCEL,它可以讓你解析類文件並找出它們的用途。我希望這會有一定的努力。

0

檢查JDepend

該圖形用戶界面顯示每個的傳入和傳出聯軸器分析Java包,在熟悉的Java Swing樹結構中。

+1

我試過JDepend。我只看到包名。我無法看到類名稱和方法名稱。 – anupsth 2010-07-20 07:21:58

0

JavaDepend可以幫助你爲這樣的需求,可以爲習慣的所有元素的任何代碼元素,它可以是罐,命名空間,類或方法。

CQL類似於查詢代碼庫的SQL使您可以更靈活地請求有關您的代碼的任何信息。

相關問題