2010-07-20 9 views
5

Ho un file jar. Voglio sapere quali classi e metodi esterni sono usati dalle classi all'interno del file JAR. Qualcuno mi può suggerire qualche strumento?come sapere quale classe/pacchetto/metodi utilizzati dal file jar specificato?

Per esempio - se indicati due classi sono confezionati in 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(){ 
    } 
} 

Quando fornisco che JAR ad un utensile - l'utensile dovrebbe mostrare java.util.Vector e Vector.adElements() sono da sorgente esterna (non presente in MyJar.jar)

Ho dimenticato di menzionare, non ho accesso al codice sorgente.

risposta

4

Facile

import com.example.*; 

Possibile

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

Una sfida

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

Missione impossibile

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

sostengo il consiglio di Jon a guardare il bytecode (BCEL), ma basta essere consapevoli, che in generale non è possibile leggere tutte le dipendenze da un vaso, in quanto possono essere dinamici e definito al di fuori della biblioteca (vedi: Missione impossibile).


difficile dire se c'è uno strumento, uno sguardo a quelle directory on java-source.net:.

Ulteriori letture

+0

Voglio provare questo con l'applicazione J2ME. Il caso "Possibile" è abbastanza per me. Qualche strumento? – anupsth

+0

+1 per i bei esempi. La "Missione impossibile" è pulita. –

+0

Mi piacerebbe creare un sistema di plugin che consenta funzionalità limitate per il plugin. Così limitato che non gli esclusi, ma le classi e i metodi consentiti possono essere elencati. Oltre ai tipi semplici, alle collezioni e alle classi definite nel JAR, non è possibile utilizzare nient'altro, nemmeno Class, per evitare trucchi di riflessione. Quale sarebbe il metodo migliore per controllare il JAR contenente il plugin o il codice sorgente del plugin? –

3

Si potrebbe voler guardare BCEL, che consentirà di analizzare i file di classe e scoprire che cosa usano. Mi aspetto che ci sarà comunque un certo sforzo.

0

check JDepend

L'interfaccia grafica utente visualizza i afferenti ed efferenti accoppiamenti di ogni analizzati pacchetto Java, presentato nella struttura ad albero Java Swing familiare.

+1

Ho provato JDepend. Ho visto solo i nomi dei pacchetti. Non sono in grado di vedere nomi di classi e metodi. – anupsth

0

JavaDepend potrebbe aiutare per tali esigenze, è possibile per qualsiasi elementi di codice vengono utilizzati tutti gli elementi, può essere vaso, spazio dei nomi, classe o un metodo.

CQL un SQL come query code base offre maggiore flessibilità per richiedere qualsiasi informazione sul codice.

Problemi correlati