2010-07-20 29 views
5

Tôi có một tệp jar. Tôi muốn biết các lớp và phương thức bên ngoài nào được sử dụng bởi các lớp bên trong tệp JAR. Bất cứ ai có thể đề nghị tôi bất kỳ công cụ?cách biết lớp/gói/phương thức nào được sử dụng bởi tệp jar đã cho?

Ví dụ - nếu dưới hai lớp được đóng gói thành 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(){ 
    } 
} 

Khi tôi cung cấp rằng JAR để một công cụ - công cụ sẽ hiển thị java.util.VectorVector.adElements() là từ nguồn bên ngoài (không có mặt trong MyJar.jar)

Quên đề cập đến, tôi không có quyền truy cập vào mã nguồn.

Trả lời

4

Dễ

import com.example.*; 

thể

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

Một thách thức

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

Sứ mệnh bất khả thi

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

Tôi ủng hộ ý kiến ​​của Jon nhìn vào mã byte (BCEL) nhưng chỉ cần lưu ý, rằng nói chung nó không thể đọc tất cả phụ thuộc từ một cái bình, vì họ có thể năng động và được định nghĩa bên ngoài thư viện (xem: Sứ mệnh không thể).


Khó có thể nói nếu có một công cụ, có một cái nhìn vào những thư mục trên java-source.net:.

Đọc thêm

+0

Tôi muốn thử điều này với ứng dụng J2ME. Trường hợp "có thể" là đủ cho tôi. Bất kỳ công cụ nào? – anupsth

+0

+1 cho các ví dụ hay. "Nhiệm vụ không thể" là gọn gàng. –

+0

Tôi muốn tạo một hệ thống plugin, cho phép chức năng giới hạn cho plugin. Vì vậy, hạn chế mà không phải là loại trừ, nhưng các lớp học và phương pháp cho phép có thể được liệt kê. Bên cạnh các loại đơn giản, các bộ sưu tập và các lớp được định nghĩa trong JAR không có gì khác có thể được sử dụng, thậm chí không phải Lớp, để tránh các thủ đoạn phản chiếu. Điều gì sẽ là phương pháp tốt nhất để kiểm tra JAR chứa các plugin, hoặc mã nguồn của các plugin? –

3

Bạn có thể muốn xem BCEL, điều này sẽ cho phép bạn phân tích cú pháp các tệp lớp học và tìm hiểu xem chúng sử dụng những gì. Tôi hy vọng nó sẽ là một số tiền nhất định của nỗ lực mặc dù.

0

Kiểm tra JDepend

Giao diện người dùng đồ họa hiển thị hướng tâm và ly tâm khớp nối của mỗi phân tích gói Java, thể hiện trong cấu trúc cây Java Swing quen thuộc.

+1

Tôi đã thử JDepend. Tôi chỉ thấy tên gói. Tôi không thể thấy tên lớp và tên phương thức. – anupsth

0

JavaDepend có thể giúp bạn cho các nhu cầu như vậy, bạn có thể cho bất kỳ yếu tố mã được tất cả các yếu tố được sử dụng, nó có thể được jar, không gian tên, lớp học hoặc phương pháp.

CQL SQL giống như cơ sở mã truy vấn cho phép bạn linh hoạt hơn để yêu cầu bất kỳ thông tin nào về mã của bạn.

Các vấn đề liên quan