Entorno de desarrollo Java para editar, compilar y ejecutar programas

Escrito por picodotdev el .
java planeta-codigo
Enlace permanente Comentarios

El entorno de desarrollo son la colección de herramientas necesarias para editar código fuente, compilarlo y ejecutar sus programas. El primer paso para aprender a programar en Java es disponer de un entorno de desarrollo con las herramientas mínimas necesarias para practicar y aplicar los conocimientos aprendidos de un curso de formación o utilizando algún libro sobre el lenguaje Java. El entorno mínimo necesario consta del JDK que incluye el compilador Java, otras herramientas que facilitan la programación son un editor avanzado o IDE con asistencia de código y una herramienta de construcción para automatizar tareas.

Java

Java es un lenguaje ya con 25 años de vida, desarrollado originalmente por Sun Microsystems y adquirida por Oracle con toda su propiedad intelectual incluyendo la plataforma y lenguaje Java. Es uno de los lenguajes de programación que ha mantenido durante muchos años la primera posición como el lenguaje más utilizado. Algunas de sus características que han contribuido a su éxito son independencia del entorno de ejecución y bytecode, recolección de basura, clases de la API y documentación Javadoc, legibilidad del código y compatibilidad hacia atrás además de ser un lenguaje fuertemente tipado y orientado a objetos.

El lenguaje de programación Java es un lenguaje compilado, eso tiene sus ventajas y algunos inconvenientes, la mayoría son ventajas. Uno de sus inconvenientes es que ejecutar un programa Java requiere el paso de compilación, a diferencia de los lenguajes dinámicos e interpretados que pueden ejecutarse desde el código fuente pero a riesgo de que en tiempo de ejecución se produzcan errores que en los lenguajes compilados se detectan en tiempo de compilación.

Durante todos estos años el lenguaje ha incorporado muchas novedades al lenguaje original desde las colecciones genéricas hasta más recientemente lambdas y modularidad entre otras muchas novedades más, en cada nueva vesión se siguen añadiendo nuevas características.

Este artículo contiene las herramientas básicas para disponer del entorno mínimo para editar, compilar y ejecutar programas escritos con el lenguaje de programación Java.

Libros sobre Java para aprender

Una buena forma de aprender a programar en un lenguaje es utilizando un libro específico sobre el lenguaje, un libro que comience si es necesario por los fundamentos del lenguaje considerando que el lector no tiene conocimientos previos en el lenguaje ni en la programación. Los libros tienen un contenido bien estructurado y son más didácticos que artículos individuales.

De Java hay mucha documetación y libros con los que aprender a programar, desde básicos hasta más avanzados o temas específicos como la concurrencia. Tres de los mejores libros sobre Java son Thinking in Java, Effective Java y Java 8 in Action sin olvidar otros buenos libros para mejorar como programadores.

El programa Hola Mundo en Java

El primer programa que se suele escribir al empezar a aprender un lenguaje de programación, es el programa Hola Mundo que emite en la consola simplemente un mensaje. En Java es el siguiente.

1
2
3
4
5
6
7
8
package io.github.picodotdev.blogbitix.java.helloworld;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hola mundo!");
    }
}
Main.java

Todo programa contiene un punto de entrada desde la que se inicia la ejecución, en Java es un método estático de nombre main que tiene como argumento un array de Strings con los argumentos con los que se ha invocado la ejecución. En Java el método main se declara dentro de una clase dado que Java es un lenguaje orientado a objetos.

El programa Hola Mundo aún con su sencillez permite escribir el mínimo programa en un lenguaje, ejecutarlo, ver su resultado pero sobre todo disponer de todas las herramientas en el entorno de desarrollo local para posteriormente escribir programas más complejos.

Las sentencias de control son los elementos básicos con los que se construyen los programas.

El JDK y la máquina virtual de Java

En Java la herramienta básica que se necesita para compilar programas y ejecutarlos es un JDK que incluye el compilador que transforma el código fuente en bytecode independiente de la arquitectura del procesador de la máquina ya sea x86, Arm, PowerPC o RISC-V y sistema operativo Windows, GNU/Linux, macOS o FreeBSD.

El programa compilador de Java es javac que informa de errores de compilación como referencias a variables, métodos o clases que no existen o de uso o asignación de tipos incorrectos entre otros y el intérprete del bytecode Java que transforma en tiempo de ejecución el bytecode en código máquina para su ejecución e incluye el recolector de basura que exime al programador de liberar explícitamente la memoria reservada.

El comando para compilar el programa Hola Mundo es el siguiente. En sus parámetros se indica el directorio donde se encuentra el código fuente y el directorio de salida para los archivos compilados a bytecode.

1
2
#!/usr/bin/env bash
javac -sourcepath src/main/java -d target/classes src/main/java/io/github/picodotdev/blogbitix/java/helloworld/Main.java
javac.sh

El compilador genera un archivo de extensión class por cada clase del programa como se muestra en el siguiente listado de archivos del directorio de salida del compilador.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ tree target/
target/
└── classes
    └── io
        └── github
            └── picodotdev
                └── blogbitix
                    └── java
                        └── helloworld
                            └── Main.class

7 directories, 1 file
tree.sh

Para ejecutar un programa Java se indica la ubicación de los archivos de bytecode, las librerías jar de clases compiladas adicionales si se utilizase alguna y la clase que contiene el método principal del programa, en Java el método estático main.

1
2
#!/usr/bin/env bash
java -classpath "target/classes" io.github.picodotdev.blogbitix.java.helloworld.Main
java.sh

El resultado de la ejecución del programa es un mensaje en la terminal.

1
2
Hola mundo!

System.out

La herramienta SDKMAN

A lo largo del tiempo Java ha publicado varias versiones del lenguaje y del JDK. Con el calendario de publicaciones aplicado desde la versión 9 se publica una nueva versión de Java cada seis meses y una versión de soporte a largo plazo cada tres años siendo la 11 la primera LTS en el 2018/09 y la 17 en el 2021/09.

Con este prolífico calendario de publicación de nuevas versiones es necesario una herramienta con la que administrar los JDK, tanto para instalar, actualizar versiones menores con parches de seguridad, desinstalar JDKs e incluso tener instaladas varias versiones del JDK al mismo tiempo.

La herramienta SDKMAN sirve para administrar los JDK, además de diferentes versiones hay diferentes distribuciones del JDK, todas parten del código fuente del proyecto OpenJDK y diferentes organizaciones proporcionan su distribución compilada y usable del JDK sin cambios o con algunos cambios adicionales. También sirve para instalar otras herramientas como una herramienta de construcción de proyectos como Gradle o los lenguajes Kotlin y Groovy.

SDKMAN

La herramienta SDKMAN se instala y usa con los siguientes comandos.

1
2
3
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk version
sdk-install.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ sdk

Usage: sdk <command> [candidate] [version]
      sdk offline <enable|disable>

  commands:
      install   or i    <candidate> [version] [local-path]
      uninstall or rm   <candidate> <version>
      list      or ls   [candidate]
      use       or u    <candidate> <version>
      default   or d    <candidate> [version]
      current   or c    [candidate]
      upgrade   or ug   [candidate]
      version   or v
      broadcast or b
      help      or h
      offline           [enable|disable]
      selfupdate        [force]
      update
      flush             <broadcast|archives|temp>

  candidate  :  the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
                use list command for comprehensive list of candidates
                eg: $ sdk list
  version    :  where optional, defaults to latest stable if not provided
                eg: $ sdk install groovy
  local-path :  optional path to an existing local installation
                eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13
sdk-usage.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
$ sdk list java
================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 14.0.1.j9    | adpt    |            | 14.0.1.j9-adpt      
               |     | 14.0.1.hs    | adpt    |            | 14.0.1.hs-adpt      
               |     | 13.0.2.j9    | adpt    |            | 13.0.2.j9-adpt      
               |     | 13.0.2.hs    | adpt    |            | 13.0.2.hs-adpt      
               |     | 12.0.2.j9    | adpt    |            | 12.0.2.j9-adpt      
               |     | 12.0.2.hs    | adpt    |            | 12.0.2.hs-adpt      
               |     | 11.0.7.j9    | adpt    |            | 11.0.7.j9-adpt      
               |     | 11.0.7.hs    | adpt    |            | 11.0.7.hs-adpt      
               |     | 8.0.252.j9   | adpt    |            | 8.0.252.j9-adpt     
               |     | 8.0.252.hs   | adpt    |            | 8.0.252.hs-adpt     
 Amazon        |     | 11.0.7       | amzn    |            | 11.0.7-amzn         
               |     | 8.0.252      | amzn    |            | 8.0.252-amzn        
...
 GraalVM       |     | 20.1.0.r11   | grl     |            | 20.1.0.r11-grl      
...
 Java.net      |     | 15.ea.26     | open    |            | 15.ea.26-open       
               |     | 14.0.1       | open    |            | 14.0.1-open         
               |     | 13.0.2       | open    |            | 13.0.2-open         
               |     | 12.0.2       | open    |            | 12.0.2-open         
               |     | 11.0.7       | open    |            | 11.0.7-open         
               |     | 10.0.2       | open    |            | 10.0.2-open         
               |     | 9.0.4        | open    |            | 9.0.4-open          
               |     | 8.0.252      | open    |            | 8.0.252-open        
...  
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================

$ sdk install java 8.0.252-open
$ sdk install java 11.0.7-open
$ sdk install java 14.0.1-open
$ sdk default java 11.0.7-open

$ sdk use java 8.0.252-open
$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

$ sdk use java 11.0.7-open
$ java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment 18.9 (build 11.0.7+10)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10, mixed mode)

$ sdk use java 14.0.1-open
$ java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)

$ sdk upgrade
sdk-commands.sh

La herramienta de construcción Gradle

En programas y proyectos grandes con muchas clases no se usa el compilador del JDK directamente y su comando para compilar las clases sino que se suele utilizar una herramienta de construcción, una de ellas es Maven que con un archivo de descripción del proyecto en formato XML y siguiendo varias convenciones compila el programa, otra herramienta es Gradle que a diferencia de Maven su archivo descriptor de proyecto es con el lenguaje Groovy o Kotlin menos verboso y propenso a errores que el XML.

Gradle

Además de para compilar un proyecto, una herramienta de construcción proporciona otras funcionalidades como ejecutar las pruebas unitarias o de integración, generar la documentación de las clases de la documentción incluida en el código fuente con la herramienta Javadoc, descargar las dependencias de librerías definidas por el proyecto, empaquetar las clases del proyecto en una librería jar y distribuir ese artefacto en los repositorios de librerías para otros proyectos.

SDKMAN también sirve para instalar una herramienta de construcción, Gradle se instala con el siguiente comando.

1
2
$ sdk install gradle

sdk-install-gradle.sh

El siguiente archivo de configuración de proyecto, con la estructura de directorios según las convenciones de Gradle permite compilar el código Java y ejecutar el programa a partir de la clase que contiene el método main.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
plugins {
    id 'java'
    id 'application'
}

group = 'io.github.picodotdev.blogbitix.java'
version = '1.0'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
}

application {
    mainClassName = 'io.github.picodotdev.blogbitix.java.helloworld.Main'
}

build.gradle

Estos son los comandos para construir el proyecto y ejecutar el método main del programa con Gradle.

1
2
$ ./gradlew build

gradle-build.sh
1
2
3
$ ./gradlew run
...
Hola mundo!
gradle-run.sh

Además, Gradle permite crear la estructura básica de directorios y archivos necesarios de forma automatizada con un comando para iniciar un proyecto de forma rápida y sin esfuerzo.

Ejecutar un programa Java desde el código fuente

Para simplificar el primer acercamiento al lenguaje Java desde la versión 11 de Java se ofrece la posibilidad de ejecutar un archivo de código fuente Java sin necesidad de compilar el código previamente de forma explícita. El propio comando java ofrece esta posibilidad. La limitación está en que el programa Java ha de estar contenido en un único archivo de código fuente aunque con la posiblidad de contener múltiples clases en el mismo archivo y no puede tener dependencias de librerías de terceros.

1
2
$ java src/main/java/io/github/picodotdev/blogbitix/java/helloworld/Main.java
Hola mundo!
java-run.sh

Otra de las facilidades proporcionada por Java es una consola interactiva REPL (read, eval, print, loop) similar a las existentes en lenguajes dinámicos e interpretados. La consola REPL consiste en un bucle para leer una entrada, evaluar, imprimir en la salida y repetir los pasos.

La consola REPL de Java se inicia con el comando jshell y sirve para hacer pequeñas pruebas de código e incluso probar el programa Hola Mundo sin necesidad de realizar los pasos de compilación y ejecución desde el código fuente ni crear un proyecto o archivos de código fuente.

1
2
3
4
5
6
7
8
$ jshell
|  Welcome to JShell -- Version 11.0.7
|  For an introduction type: /help intro

jshell> System.out.println("Hola mundo!");
Hola mundo!

jshell>
jshell.sh

Entorno integrado de desarrollo

Escribir código el código fuente de un programa es posible con cualquier editor de texto incluído el básico que incluyen los sistemas operativos de escritorio como Bloc de notas en Windows o Gedit del entorno de escritorio GNOME y GNU/Linux, también con editores basados en consola como Nano o Vim.

Sin embargo, en la plataforma Java la mayor parte de los programadores utilizamos un editor especializado para editar código fuente con un entorno integrado de desarrollo o IDE. En la plataforma Java los IDE más populares son IntelliJ IDEA que tiene una licencia comercial pero una versión para la comunidad gratuita muy completa, eclipse y NetBeans tienen una licencia de software libre y son gratuitos aún así por sus características y buen funcionamiento IntelliJ se ha convertido en una de los preferidos de los programadores Java.

IntelliJ IDEA

IntelliJ IDEA

Son muchos los beneficios de usar un IDE con un lenguaje compilado y fuertemente tipado como Java. Los IDE aprovechan estas características para proporcionar errores precisos y descriptivos de compilación según se escriben las líneas de código, asistencia de código en métodos disponibles de una clase que aún siendo Java un lenguaje verboso permite escribir código pulsando pocas teclas, refactors de código que permiten cambiar el código existente de forma automatizada evitando mucho trabajo manual que aumenta dramáticamente la productividad, integran una terminal para ejecutar comandos sin necesidad de salir del IDE e integración con las herramientas de construcción como Gradle y de pruebas unitarias automatizadas entre otras muchas funcionalidades muy útiles.

Distribuciones GNU/Linux

Uno de los beneficios del software libre y del código abierto es que normalmente es gratuito, no tienen costosas licencias comerciales para usar el software lo que permite usarlo sin grandes barreras ya sea con fines educativos o comerciales.

GNU/Linux siempre ha sido un sistema operativo con un excelente soporte y herramientas destinadas a los desarrolladores con cantidad de lenguajes de programación disponibles, compiladores, editores y una excelente línea de comandos con multitud de utilidades para automatizar tareas repetitivas. A día de hoy hay muchas distribuciones de GNU/Linux que son tan fáciles de instalar y usar como Windows o macOS ni tienen nada que envidiar a estos sitemas operativos comerciales con licencias privativas. En los últimos años cualquier hardware conocido funciona bien sin necesidad de instalar controladores adicionales y el soporte para juegos y controladores gráficos poseen un rendimiento similar a Windows.

Dado que muchos de los servidores funcionan con GNU/Linux su conocimiento es muy útil en la vida laboral y demandado por las empresas. Usarlo es la mejor forma de aprender y adquirir conocimientos.

El primer paso para usar GNU/Linux es elegir una distribución GNU/Linux según nuestras preferencias, una de las más populares y recomendadas para usuarios que dan el salto desde Windows es Ubuntu. El siguiente paso es descargar e instalar Ubuntu paso a paso desde cero con un instalador guiado con varios pasos en los que hay que hacer poco más que seleccionar el idioma, la disposición del teclado y nombre de usuario, en menos de una hora se instala Ubuntu. Uno de los motivos por el que muchos usuarios siguen usando Windows son los juegos, con Wine para ejecutar programas de Windows en GNU/Linux y la plataforma de juegos Steam la mayoría de los juegos desarrollados para Windows funcionan en GNU/Linux.

Ubuntu Fedora Arch Linux

GNU Linux

Terminal

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub.

Comparte el artículo: