====== Anexo: Java desde Línea de Comandos ======
En este apartado vamos a repasar como trabajar con las herramientas que incorpora el JDK.
===== Java Development Kit (JDK) =====
Al instalar el entorno de desarrollo de Java se incorporan dos paquetes:
* JDK (Java Development Kit): entorno de desarrollo de Java. Contiene lo necesario para crear aplicaciones Java.
* JRE (Java Runtime Environment): entorno de ejecución de java. Contiene lo necesario para ejecutar aplicaciones creadas en Java.
Se instalan en directorios diferentes, por defecto en "Archivos de programa/Java".
{{ :anexos:java-dir.png?150|}}
Un equipo que tenga el JRE puede ejecutar aplicaciones creadas en Java.
Por otro lado, el JDK incorpora las herramientas necesarias para desarrollar en Java. Estas herramientas se encuentran en el directorio //bin//. Algunas de las más usadas son:
* compilador: **javac.exe**
* empaquetador de fichero JAR: **jar.exe**
* generador de documentacion de java: **javadoc.exe**
* desemsamblador de bytecode de java: **javap.exe**
{{ :anexos:java-bin-dir.png?450 |}}
Todas estas herramientas están pensadas para ser ejecutadas desde linea de comandos, o ejecutadas por aplicaciones que dispongan de una interfaz gráfica, como puede ser un entorno de desarrollo (IDE). Para que nuestro entorno de desarrollo pueda compilar, generar ficheros JAR, generar Javadocs, etc, necesita usar las herramientas incluidas en el JDK.
==== Configurar Java para acceder desde linea de comandos ====
Normalmente, tanto si utilizamos instaladores de JDK para Windows, como si lo instalamos en Linux, se establece un enlace a estos programas para que nuestro terminal de comandos pueda ejecutarlos. Por ejemplo, al ejecutar **javac** desde un terminal, deberíamos ver algo como esto:
{{ :anexos:consolawin.png?450 |}}
Si me indica que **"no se reconoce el comando..."** , entonces debo configurarlo.
Para añadirlo tan solo debo configurar la variable PATH del sistema con la ruta del directorio del jdk de java. [[https://programacion.abrilcode.com/doku.php?id=bloque1:javaeclipse#actualizar_variable_de_entornopath|Se explica aquí]].
===== Ejecutar con comando java =====
==== Ejecutar ficheros .class ====
Para ejecutar haremos uso del comando **java** seguido del nombre del fichero ''.class'', **pero sin incluir la extensión ''.class''**:
java HolaMundo
En el caso de que la clase ''.java'' tenga una definición de //package//:
package com.fvaldeon.paquete1; //Definicion del package
public class HolaMundo{
public static void main( String[] args ){
System.out.println( "Hola mundo" );
}
}
..se debe desde el directorio en el que se encuentre el primer paquete:
java com/fvaldeon/paquete1/HolaMundo
Observar que a la hora de ejecutar un fichero compilado **no se indica su extensión al final (.class)**.
==== Ejecutar un fichero JAR ====
Para compilar un programa empaquetado en un fichero ''.jar'':
java -jar HolaMundo.jar
En este caso, si el fichero tiene interfaz gráfica, se abrirá y podremos ver en la linea de comandos los mensajes que se pudieran mostrar por consola desde la aplicación.
===== Compilar con comando javac =====
Para compilar hago uso del programa **javac** seguido del nombre del fichero ''.java'' que quiero compilar.
javac ficheroFuente [opciones]
#Ejemplo
javac HolaMundo.java
Si existen errores de compilación nos lo mostrará e indicará la linea. Si todo está correcto, no mostrará nada pero generará un fichero ''.class'' en el mismo directorio que el ''.java''
==== Compilar una clase en un Package ====
Para compilar un fichero fuente que contiene la definición **package** (1ª linea del fichero fuente) debo compilarlo desde el directorio en el que se encuentra el package:
javac package/subpackage/HolaMundo.java
==== Compilar varios ficheros ====
Para compilar varios ficheros tengo varias opciones:
* Indicar todos los ficheros al comando //javac// separados por un espacio:
javac HolaMundo.java Principal.java
javac paquete1/HolaMundo.java paquete1/Principal.java
* Utilizar el caracter comodín (*):
javac *.java
javac paquete1/*.java paquete2/*.java
* Si en el código de un fichero fuente se hace referencia a otro fichero fuente que se encuentra en el mismo directorio, se compilará también automáticamente.
----
(c) {{date> %Y}} Fernando Valdeón