2010-07-20 7 views
5

Tengo un archivo jar. Quiero saber qué clases y métodos externos son utilizados por las clases dentro del archivo JAR. ¿Alguien puede sugerirme alguna herramienta?cómo saber qué clase/paquete/métodos usa el archivo jar dado?

Por ejemplo - si por debajo de dos clases se empaquetan en 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(){ 
    } 
} 

Cuando suministro que JAR a una herramienta - la herramienta debe mostrar java.util.Vector y Vector.adElements() son de una fuente externa (no presente en MyJar.jar)

Se me olvidó mencionar que no tengo acceso al código fuente.

Respuesta

4

Fácil

import com.example.*; 

Posible

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

Un reto

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

Misión imposible

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

Apoyo consejos de Jon para mirar el código de bytes (BCEL) pero ten en cuenta, que en general no es posible leer todas las dependencias de un frasco, ya que pueden ser dinámicos y definido fuera de la biblioteca (ver: Misión imposible).


difícil decir si hay una herramienta, echar un vistazo a esos directorios en java-source.net:.

Lectura adicional

+0

Quiero probar esto con la aplicación J2ME. El caso "posible" es suficiente para mí. ¿Alguna herramienta? – anupsth

+0

+1 para los buenos ejemplos. La "Misión imposible" es ordenada. –

+0

Me gustaría crear un sistema de complemento que permita una funcionalidad limitada para el complemento. Tan limitado que no los excluidos, pero las clases y métodos permitidos se pueden enumerar. Además de los tipos simples, las colecciones y las clases definidas en el JAR, no se puede usar nada más, ni siquiera Class, para evitar los trucos de reflexión. ¿Cuál sería el mejor método para verificar el JAR que contiene el complemento o el código fuente del complemento? –

3

Es posible que desee consultar BCEL, que le permitirá analizar los archivos de clase y descubrir qué utilizan. Sin embargo, espero que sea una cierta cantidad de esfuerzo.

0

Comprobar JDepend

La interfaz gráfica de usuario muestra los acoplamientos aferentes y eferentes de cada analizaron paquete de Java, se presenta en la estructura de árbol de Java Swing familiar.

+1

Probé JDepend. Solo vi nombres de paquetes. No puedo ver los nombres de las clases y los nombres de los métodos. – anupsth

0

JavaDepend que podría ayudar a tales necesidades, puede utilizarse para cualquier consiguen elementos de código a todos los elementos, se puede frasco, espacio de nombres, clase o método.

CQL y SQL le gusta consultar la base de códigos le ofrece más flexibilidad para solicitar cualquier información sobre su código.

Cuestiones relacionadas