Actualizar java en Ubuntu

Acrtualizar java desde Linux puede ser una autentica odisea , en este post vamos a ver como solucionar este inconveniente


Para conseguir que un fichero .jar funcione en Ubuntu deben cumplirse dos requisitos

      1. Tener instalada la máquina virtual de java
      2. Definir el programa a utilizar para abrir los ficheros .jar

Comentar que existen dos versiones

      1. El JRE o Java Runtime Enviroment que no es más que el conjunto de aplicaciones y librerías necesarias para poder usar una aplicación Java (prácticamente la máquina virtual y algunas herramientas más)
      2. El JDK o Java Development Kit que está formado por el JRE mencionado en el punto anterior y todo lo necesario para poder desarrollar aplicaciones en este lenguaje de programación.

Si tiene instalado el JRE,bastara con hacer click con el botón derecho sobre un fichero .jar y seleccionar  en el formulario que nos aparece, escribir a continuación escribiremos

java -jar

Bueno ¿y  si no nos funciona?  

Pues en ocasiones si intentamos instalar el JRE  en Ubuntu   puede  ser casi  un verdadera  odisea pues es frecuente que  muestre un  error similar al siguiente:

introducir el código aquí sudo apt install oracle-java8-set-default
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
, pero algún
otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo         
se encuentra disponible desde alguna otra fuente
Sin embargo, los siguientes paquetes lo reemplazan:
oracle-java12-set-default oracle-java11-set-default-local

E: El paquete «oracle-java8-set-default» no tiene un candidato para la 
instalación

También si  intenta con el siguiente  comando nos da el mismo error

sudo apt install oracle-java8-installer

Puede   que muestre este mensaje :

 los siguientes paquetes lo reemplazan: oracle-java12-set-default oracle-java11-set-default-local

El problema es que si adicionamos  también el repositorio de webupd8 esos paquetes se encuentran en otro  repositorio .

sudo add-apt-repository ppa:webupd8team/java – 

Pero   aun así , si lo intentamos instalar  seguimos obteniendo el mismo error

Este es un log de ejemplo de lo que pueda usted también sufriendo intentando instalar el jdk por ejemplo para  crear aplicaciones en java con el Ide de Eclpise  o simplemente porque necesita  ejecutar un jar  desde Ubuntu Linux Mint o cualquier otra version de Linux: 




[email protected]:~$ sudo add-apt-repository ppa:webupd8team/java
[sudo] contraseña para soloelectronicos:
The Oracle JDK License has changed for releases starting April 16, 2019.

The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost -- but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. An FAQ is available here: https://www.oracle.com/technetwork/java/javase/overview/oracle-jdk-faqs.html

Oracle Java downloads now require logging in to an Oracle account to download Java updates, like the latest Oracle Java 8u211 / Java SE 8u212. Because of this I cannot update the PPA with the latest Java (and the old links were broken by Oracle).

For this reason, THIS PPA IS DISCONTINUED.

For Oracle Java 11, see a different PPA -> https://www.linuxuprising.com/2019/06/new-oracle-java-11-installer-for-ubuntu.html

That same PPA also has Oracle Java 13 -> https://www.linuxuprising.com/2019/09/install-oracle-java-13-on-ubuntu-linux.html

and Oracle Java 14 ->
https://www.linuxuprising.com/2020/03/how-to-install-oracle-java-14-jdk14-on.html

Old description:

Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Java files in this PPA.

Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html

Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

The PPA supports Ubuntu 18.10, 18.04, 16.04, 14.04 and 12.04.

More info (and Ubuntu installation instructions):
- http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Debian installation instructions:
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html
Más información: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Pulse [ENTRAR] para continuar o Ctrl+C para cancelar la adición.

Obj:1 http://ppa.launchpad.net/thopiekar/cura/ubuntu bionic InRelease
Des:2 http://ppa.launchpad.net/webupd8team/java/ubuntu bionic InRelease [15,4 kB]
Obj:3 http://es.archive.ubuntu.com/ubuntu bionic InRelease
Des:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Obj:5 https://repo.skype.com/deb stable InRelease
Des:6 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]
Des:7 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
Des:8 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38,7 kB]
Des:9 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42,1 kB]
Des:10 http://es.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [669 kB]
Des:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2.464 B]
Des:12 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [915 kB]
Des:13 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1.014 kB]
Des:15 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1.065 kB]
Des:16 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]
Des:17 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe DEP-11 64x64 Icons [458 kB]
Des:18 http://es.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2.468 B]
Des:19 http://es.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7.968 B]
Descargados 5.057 kB en 4s (1.376 kB/s)
Leyendo lista de paquetes... Hecho
[email protected]:~$ sudo apt update
Obj:1 http://ppa.launchpad.net/thopiekar/cura/ubuntu bionic InRelease
Obj:2 http://es.archive.ubuntu.com/ubuntu bionic InRelease
Des:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Obj:4 http://ppa.launchpad.net/webupd8team/java/ubuntu bionic InRelease
Des:5 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]
Obj:6 https://repo.skype.com/deb stable InRelease
Des:7 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
Des:8 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38,6 kB]
Des:9 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]
Des:10 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42,1 kB]
Des:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2.464 B]
Des:12 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]
Des:13 http://es.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2.468 B]
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7.968 B]
Descargados 920 kB en 3s (307 kB/s)
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se pueden actualizar 12 paquetes. Ejecute «apt list --upgradable» para verlos.
[email protected]:~$ sudo apt install oracle-java8-installer
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación

[email protected]:~$ apt list --upgradable
Listando... Hecho
binutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
binutils-common/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
binutils-x86-64-linux-gnu/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
gnome-software/bionic-updates 3.28.1-0ubuntu4.18.04.15 amd64 [actualizable desde: 3.28.1-0ubuntu4.18.04.14]
gnome-software-common/bionic-updates,bionic-updates 3.28.1-0ubuntu4.18.04.15 all [actualizable desde: 3.28.1-0ubuntu4.18.04.14]
libbinutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
libjson-glib-1.0-0/bionic-updates 1.4.2-3ubuntu0.18.04.1 amd64 [actualizable desde: 1.4.2-3]
libjson-glib-1.0-common/bionic-updates,bionic-updates 1.4.2-3ubuntu0.18.04.1 all [actualizable desde: 1.4.2-3]
libnautilus-extension1a/bionic-updates 1:3.26.4-0~ubuntu18.04.5 amd64 [actualizable desde: 1:3.26.3-0ubuntu4]
python3-update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
update-manager-core/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
[email protected]:~$ java --version
openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)
[email protected]:~$ sudo apt install oracle-java8-installer
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación
[email protected]:~$ sudo apt install default-jre
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
default-jre ya está en su versión más reciente (2:1.11-68ubuntu1~18.04.1).
El paquete indicado a continuación se instaló de forma automática y ya no es necesario.
libllvm6.0
Utilice «sudo apt autoremove» para eliminarlo.
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 12 no actualizados.
[email protected]:~$
[email protected]:~$ sudo apt install oracle-java8-installer
[sudo] contraseña para soloelectronicos:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación

 

RESOLUCION

Pues el problema es que el repo webupd8team lo han descontinuado desde hace ya tiempo; teniendo el mismo inconveniente en Mint 19.1 queriendo instalar la JDK 1.8.0_31, y  la solución que he encontrado es netamente manual pero muy sencilla :

Lo primero es descargar la JDK desde el sitio web de Oracle    donde nos van a pedir las credenciales  para acceder ( es gratuito)

Después, desde  una ventana  de terminal  ejecute los siguientes comandos (tenga cuidado pues los comandos varian en la version de JDK!):

  1. Descomprimir al directorio /usr/lib/jvm:

sudo tar -zxf ~/Descargas/jdk-8u202-linux-x64.tar.gz -C /usr/lib/jvm

  1. Actualizar el comando java:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_202/bin/java 100

  1. Actualizar el comando javac:

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_202/bin/javac 100

  1. Establecer la JDK de Oracle como default:

sudo update-alternatives --config java

Y seleccione la opción correspondiente a la JDK 8( en el ejemplo  seleccione 3):

 

[email protected]:~/Descargas$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_202/bin/java 100
[email protected]:~/Descargas$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_202/bin/javac 100
[email protected]:~/Descargas$ sudo update-alternatives --config java
Existen 2 opciones para la alternativa java (que provee /usr/bin/java).

Selección Ruta Prioridad Estado
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 modo automático
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 modo manual
2 /usr/lib/jvm/jdk1.8.0_202/bin/java 100 modo manual

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección: 2
update-alternatives: utilizando /usr/lib/jvm/jdk1.8.0_202/bin/java para proveer /usr/bin/java (java) en modo manual





Enviar correo internamente usando JavaMail API

Veremos como enviar fácilmente correos electrónicos en nuestra aplicación móvil mediante el Android Studio


En realidad no es demasiado difícil crear un aplicación capaz de enviar correos electrónicos usando el IDE de Android Studio  .De hecho gracias al APi de Javmail   podremos enviar e-mails sin utilizar la aplicación de correo electrónico que android incluye por defecto utilizando javamail API para crear nuestro propio email del remitente herramientas que enviará correo internamente.

Tenemos que seguir los pasos que se dan a continuación:

1. Descargar los archivos de biblioteca de api de java.

Tenemos que descargar  tres   librerías java: 

    1. activation.jar
    2. mail.jar.
    3.  additionnal.jar

    Lo puede descargar de Clic aquí.

    2 Ahora crear una  app en Android studio

    3-Ir a la carpeta del proyecto -> aplicación -> libs y agregue todos los archivos jar en libs ahora uno por uno, haga clic en biblioteca de archivos en la opción haga clic en Agregar como biblioteca en todos los archivos jar.

    libs

    También puede Agregar biblioteca por otro camino, pero lo  importante es que incluya esta tres librerías:

    1. activation.jar
    2. mail.jar.
    3.  additionnal.jar

    Ir a archivo >Proyecto estructura > seleccione aplicación> opción derecha haga clic en dependencias ahora haga clic en el botón de pulse(+) para agregar > seleccione dependencia de archivo> archivo seleccione Biblioteca > OK.

    addjar

    4. Ahora abrir el archivo manifest.xml y poner los permisos de internet.

     <uses-permission android:name="android.permission.INTERNET"/>

    Ahora busque manifiesto está buscando como.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.sp.sendmailinternally">
        <uses-permission android:name="android.permission.INTERNET"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

    4. Ahora abrael fichero  activity_main.xml para crear el archivo de diseño agregar después de código.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.sp.sendmailinternally.MainActivity">
        <EditText
            android:id="@+id/edittext_recipient_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Recipient Email"
            android:textSize="18sp" />
        <EditText
            android:id="@+id/edittext_subject"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Subject"
            android:textSize="18sp" />
        <EditText
            android:id="@+id/edittext_message"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="start"
            android:hint="Message"
            android:textSize="18sp" />
        <Button
            android:id="@+id/btn_send_mail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Send Mail"
            android:textAllCaps="false" />
    </LinearLayout>

    5. Cree la  clase de Asyntask para el envío de llamada correo API.

    package com.sp.sendmailinternally;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;
    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    /**
     * Created by ps205 on 3/1/17.
     */
    public class SendMailAsynTask extends AsyncTask<Void, Void, Void> {
        //Declaring Variables
        private Context context;
        private Session session;
        //Information to send email
        private String email;
        private String subject;
        private String message;
        //Progressdialog to show while sending email
        private ProgressDialog progressDialog;
        //Class Constructor
        public SendMailAsynTask(Context context, String email, String subject, String message) {
            //Initializing variables
            this.context = context;
            this.email = email;
            this.subject = subject;
            this.message = message;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //Showing progress dialog while sending email
            progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false);
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Dismissing the progress dialog
            progressDialog.dismiss();
            //Showing a success message
            Toast.makeText(context, "Message Sent", Toast.LENGTH_LONG).show();
        }
        @Override
        protected Void doInBackground(Void... params) {
            //Creating properties
            Properties props = new Properties();
            //Configuring properties for gmail
            //If you are not using gmail you may need to change the values
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
            //Creating a new session
            session = Session.getDefaultInstance(props,
                    new javax.mail.Authenticator() {
                        //Authenticating the password
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
                        }
                    });
            try {
                //Creating MimeMessage object
                MimeMessage mm = new MimeMessage(session);
                //Setting sender address
                mm.setFrom(new InternetAddress(Config.EMAIL));
                //Adding receiver
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
                //Adding subject
                mm.setSubject(subject);
                //Adding message
                mm.setText(message);
                //Sending email
                Transport.send(mm);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    6. Ahora abra MainActivity.java y agregue el siguiente código.

    package com.sp.sendmailinternally;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    public class MainActivity extends AppCompatActivity {
        EditText edittext_recipient_id, edittext_subject, edittext_message;
        Button btn_send_mail;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //initializr vista para encontar vista por id
            edittext_recipient_id = (EditText) findViewById(R.id.edittext_recipient_id);
            edittext_subject = (EditText) findViewById(R.id.edittext_subject);
            edittext_message = (EditText) findViewById(R.id.edittext_message);
            btn_send_mail = (Button) findViewById(R.id.btn_send_mail);
    //activar un listener  onclick en un  boton
            btn_send_mail.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //get  input data from view
                    String mRecipientMail = edittext_recipient_id.getText().toString();
                    String mSubject = edittext_subject.getText().toString();
                    String mMessage = edittext_message.getText().toString();
                    new SendMailAsynTask(MainActivity.this, mRecipientMail, mSubject, mMessage).execute();
    //llama al contructor de send mail asyntask mediante el envio de un parametroperameter } }); } }

    7. Ya puede construir y ejecutar la aplicación  

    Nota:- cuando ponga su id debe ser accesible acceso menos seguro aplicaciones .Para cambiar configuración para motivos de seguridad de correo vaya a cambiar la configuración   y actiíela .

     

    sendmail1

    Por cierto todo el código  esta disponible en descargar código fuente

     

     

     

    Ingeniería inversa con java


    Si alguna vez  ha tenido un proyecto java compilado en forma de fichero .class  o .jar   y necesita conocer como esta construido el código para  hacer ingeniería inversa o simplemente para investigar su  funcionamiento,  la herramienta que vamos a ver, lo hace de maravilla ! y además es gratuita!, veamos en detalle en que consiste.

    En  efecto el “proyecto Java Decompiler” tiene como objetivo desarrollar herramientas para descompilar y analizar el “código de bytes” de Java 5 y las versiones posteriores siendo  JD-GUI la utilidad gráfica independiente que muestra los códigos fuente de Java de los archivos “.class”.

    Con esta herramienta puede explorar el código fuente reconstruido con la GUI de JD para obtener acceso instantáneo a los métodos y campos Incluso puede integrarse  con el IDE de Eclipse  gracias a  JD-Eclipse, que  es un complemento para la plataforma Eclipse.

    La herramienta le permite mostrar todas las fuentes Java durante su proceso de depuración, incluso si no las tiene todas. JD-Core es una biblioteca que reconstruye el código fuente de Java de uno o más archivos “.class”. JD-Core se puede usar para recuperar el código fuente perdido y explorar la fuente de las bibliotecas de tiempo de ejecución de Java.

    Se admiten las nuevas características de Java 5, como anotaciones, genéricos o tipo “enum”. JD-GUI y JD-Eclipse incluyen la biblioteca JD-Core. JD-Core, JD-GUI y JD-Eclipse son proyectos de código abierto publicados bajo la licencia GPLv3.

    Veamos un poco algo sobre la historia de esta  interesante  herramienta:

    • En 2011, Alex Kosinsky inició una variante de JD-Eclipse que admite la alineación del código descompilado por los números de línea de los originales, que a menudo se incluyen en el Bytecode original como información de depuración.
    • En 2012, una rama de JDEclipse-Realign de Martin “Mchr3k” Robertson  extendió la funcionalidad mediante el control de descompilación manual y el soporte para Eclipse 4.2 (Juno).
    • Y llegamos a la actualidad    D (Java Decompiler) ,  es un decompilador para el lenguaje de programación Java.Se proporciona como una herramienta GUI, así como en forma de complementos para los entornos de desarrollo integrado Eclipse (JD-Eclipse) e IntelliJ IDEA (JD-IntelliJ).Es compatible con la mayoría de las versiones de Java desde 1.1.8 hasta 1.7.0, así como JRockit 90_150, Jikes 1.2.2, Eclipse Java Compiler y Apache Harmony y, por lo tanto, a menudo se utiliza donde anteriormente se operaba el popular JAD

    Java decompiler

    Instalación

    Se puede descargar directamente desde  su pagina de Github

    La versión ultima   disponibles  es la 1.5.2

    Esta versión incluye los siguientes cambios:

    • Actualizando JD-Core a 1.0.3
    • Adición de soporte de archivos AAR (archivo de Android)
    • Adición de soporte de archivos JMOD (módulo Java 9)

    Este   es el enlace para descargar el  jd-gui-windows-1.5.2.zip   que es la versión  que   funciona sobre windows.

    Descomprimimos el  ficherpo zip ( https://github.com/java-decompiler/jd-gui/releases/download/v1.5.2/jd-gui-windows-1.5.2.zip)

    Finamente lanzaremos la aplicación  jd-gui.exe

    JD-GUI es una utilidad gráfica independiente que muestra los códigos fuente de Java de los archivos “.class”  y también  “.jar”  . Puede explorar el código fuente reconstruido con la GUI de JD para obtener acceso instantáneo a los métodos y campos.

    Existe JD-Eclipse es un complemento para la plataforma Eclipse. Le permite mostrar todas las fuentes Java durante su proceso de depuración, incluso si no las tiene todas.

    JD-GUI es una utilidad gráfica independiente que muestra los códigos fuente de Java de los archivos “.class”. Puede explorar el código fuente reconstruido con la GUI de JD para obtener acceso instantáneo a los métodos y campos.

    Mas  información en su sitio  http://java-decompiler.github.io/