Come faccio a stampare le strutture di classe in un file jar con lo strumento javap?

StackOverflow https://stackoverflow.com/questions/1171549

  •  19-09-2019
  •  | 
  •  

Domanda

voglio elencare i metodi di file di classe nel vaso utilizzando lo strumento javap. Come posso fare in modo che elenca i metodi e membri di tutti i file di classe nel vaso. In questo momento sono in grado di farlo per una sola classe alla volta.

Mi aspetto qualcosa di simile se dico

javap java.lang.*

dovrebbe ricorrere ai metodi e membri di tutte le classi nel pacchetto java.lang. Se javap non è capace di questo, ci sono tali strumenti a disposizione?

È stato utile?

Soluzione

#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do 
    # Replace /'s with .'s
    class=${class//\//.};
    # javap
    javap -classpath $jar ${class//.class/}; 
done

Altri suggerimenti

Ancora più facile sarebbe

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)

Per prima decomprimere il file jar, questo produrrà una serie di directory per ogni pacchetto, quindi applicare il comando javap per directory.

Così, per esempio con Tomcat è possibile decomprimere il file catalina-balancer.jar in webapps \ bilanciatore e quindi utilizzare

javap -classpath org\apache\webapp\balancer Rule

che dà

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

Se avete bisogno di fare questo per tutti i file di classe in un pacchetto che sarà necessario scrivere uno script o un programma di camminare classpath e striscia la .class dai nomi dei file e passarlo al javap.

(Sarebbe abbastanza facile da scrivere in perl / bash / java).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top