El JVM no puede ejecutar directamente el código que escribes. Solo sabe cómo ejecutar programas escritos en bytecode. El bytecode es un lenguaje de bajo nivel que se asemeja al código de la máquina.

En Java, la compilación es la traducción de un programa (de alto nivel) escrito en Java al mismo programa escrito en bytecode.

El código se pasa en un archivo .java al compilador. Si el compilador no encuentra errores en el código, entonces obtienes un nuevo archivo de bytecode. Este archivo tendrá el mismo nombre pero con una extensión diferente: .class. Si hay errores en el código, el compilador te informará de que "el programa no se ha compilado". Luego, debes leer cada mensaje de error y corregir los errores.

Para invocar el compilador, que es parte del JDK (Java Development Kit), se usa el comando javac. Eso significa que si instalas solo el JRE (Java Runtime Environment), ¡no tendrás el compilador! Solo tendrás la JVM, que solo puede ejecutar bytecode. Por lo tanto, instalamos el JDK y pasamos nuestro archivo .java al compilador.

Por ejemplo, tomemos un programa simple con algunas salidas por consola:

class MySolution {
   public static void main(String[] args) {
      System.out.println("Hi, command line!");
   }
}

Guardemos este código en el archivo D:/temp/MiSolucion.java.

Compilamos nuestro código usando el comando:

D:\temp>javac MySolution.java

Si no hay errores de compilación en el código, aparecerá un archivo MySolution.class en la carpeta temp. Además, el archivo MySolution.java que contiene el código no se mueve. Permanece donde estaba. Pero ahora, MySolution.class contiene bytecode y está listo para ejecutarse directamente en el JVM.

Nuestro ejemplo es lo más simple posible, pero incluso los proyectos más grandes y complejos utilizan el comando javac. Por lo tanto, será muy útil que conozcas cómo funciona.

Puedes compilar más de una clase a la vez. Por ejemplo, supongamos que hay otro archivo Cat.java en la carpeta temp:

D:\temp>javac MySolution.java Cat.java

O esto:

D:\temp>javac *.java

Una vez compilados, los archivos .class pueden ser empaquetados en un archivo jar, que se puede mover fácilmente a diferentes computadoras y luego ejecutar en ellas. Aquí hay un ejemplo de cómo crear un archivo jar:

D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class

donde:

  • jar es el comando para crear archivos .jar, incluido en el JDK

  • cvfe son opciones de línea de comando con los siguientes significados:

    • c – crear un nuevo archivo jar

    • v – mostrar información detallada

    • f – indica que queremos que la salida de la herramienta se coloque en un archivo (myjar.jar)

    • e – indica el punto de entrada (MySolution), es decir, la clase que contiene el método main

  • MySolution.java Cat.class – nombres separados por espacios de los archivos que se empaquetarán en el archivo jar.

Así es cómo ejecutamos el archivo jar resultante:

D:\temp>java -jar myjar.jar
Para obtener información más detallada:
Las herramientas javac y jar tienen ayuda incorporada. Para mostrarla, ejecute lo siguiente en la línea de comandos:
  • javac --help
  • jar --help