1. Introducción
En este tutorial, discutiremos la descompilación de clases de Java. Cuando el código fuente no está disponible, descompilar las clases de Java ayuda a depurar y comprender el comportamiento del código fuente.
Echemos un vistazo a las diferentes opciones disponibles.
2. Descompilación en IDE
Dado que la mayor parte del desarrollo se realiza en un entorno de desarrollo integrado (IDE), tiene sentido que la descompilación también se lleve a cabo en un IDE.
Para obtener más información sobre los IDE con los que trabajaremos, consulte nuestros artículos sobre cómo depurar en Eclipse y configuración para IntelliJ IDEA.
2.1. Eclipse
En primer lugar, en Eclipse necesitamos un complemento como Enhanced Class Decompiler (ECD). Este complemento utiliza cinco descompiladores diferentes. Podemos instalarlo desde Eclipse Marketplace y luego necesitamos reiniciar Eclipse.
A continuación, ECD requiere una pequeña cantidad de configuración para asociar archivos de clase con el Visor de descompilador de clases:

Además, necesitamos asociar archivos " .class sin fuente":

Finalmente, podemos usar el descompilador presionando Ctrl + Clic izquierdo en el nombre de una clase . Vemos el descompilador utilizado en la pestaña del archivo entre paréntesis.
En este ejemplo, usamos FernFlower:

2.2. IntelliJ IDEA
A diferencia de Eclipse, IntelliJ IDEA proporciona el descompilador FernFlower por defecto .
Para usarlo, simplemente presionamos Ctrl + clic izquierdo en el nombre de una clase y vemos el código:

Además, podemos descargar la fuente. La descarga de la fuente proporcionará el código real y los comentarios.
Por ejemplo, la clase de anotación Component de la captura de pantalla anterior incluye Javadoc sobre el uso de Component . Podemos notar la diferencia:

Si bien la descompilación es muy útil, no siempre ofrece una imagen completa . El código fuente completo nos da una imagen completa.
3. Descompilación de la línea de comandos
Antes de los complementos IDE, la línea de comandos se usaba para descompilar clases. Los descompiladores de línea de comandos también pueden ser útiles para depurar el código de bytes de Java en un servidor remoto al que no se puede acceder con un IDE o GUI.
Por ejemplo, podemos descompilar con JDCommandLine usando un simple comando jar:
java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes
No omita el parámetro ./classes. Define el directorio de salida.
Después de una descompilación exitosa, podemos acceder a los archivos fuente contenidos en el directorio de salida. Ahora están listos para verlos a través de un editor de texto como Vim.
4. Conclusión
Analizamos la descompilación en Eclipse e IntelliJ IDEA IDE, así como una opción de línea de comandos cuando no están disponibles.
También analizamos la diferencia entre vincular el código fuente y la descompilación.