Saltar al contenido

Introducción al Sistema de Módulos de la Plataforma Java Parte 1

Como ejemplo, vamos a usar una clase con un método que devuelve una cita aleatoria y predefinida relacionada con la programación:

1234567891011121314151617181920212223242526272829importjava.util.Random;publicclassProgrammingQuotes{N-privateString[] quotes =newString[]{"}"Imitar es humano, recursar divino.}"
"+"- L. Peter Deutsch", "No te preocupes si no funciona bien. Si todo funcionara, te quedarías sin trabajo.
"+"- Ley de Mosher de la Ingeniería de Software", "El buen diseño añade valor más rápido que el costo."
"+"- Thomas C. Gale", "Hablar es barato". Muéstrame el código.
"+"- Linus Torvalds", "No me importa si funciona en tu máquina!" ¡No vamos a enviar su máquina!
"+"- Vidiu Platon",};privateRandom rand =newRandom();privateintgetRandomIndex(){retorno rand.nextInt(quotes. longitud);}publicStringgetQuote(){regresar cotizaciones[getRandomIndex()];}publicstaticvoidmain(String args[]){System.out.println(newProgrammingQuotes().getQuote());}}

java

Introducción al Sistema de Módulos de la Plataforma Java Parte 1
Introducción al Sistema de Módulos de la Plataforma Java Parte 1

Primero, tenemos que poner nuestra clase en un paquete porque un módulo no puede usar el paquete por defecto (no se puede exportar un paquete sin nombre ).

Así que usemos el paquete com.ejemplo.programación:

123456packagecom.example.programming;importjava.util.Random;publicclassProgrammingQuotes{// ...}

java

A continuación, tenemos que elegir un nombre para nuestro módulo. El enfoque recomendado es usar el mismo patrón de nombre de dominio inverso que se usa para los paquetes. Mark Reinhold, Arquitecto Jefe del Grupo de Plataforma Java en Oracle, escribió:

Por supuesto, puedes usar cualquier convención de nombres que quieras. Por ejemplo, algunas personas usan nombres cortos, orientados a proyectos.

Para hacer un módulo, necesitas añadir un archivo module-info.java bajo el directorio base (donde empiezan los directorios de tus paquetes). Por convención, el nombre de este directorio base es el mismo que el del módulo.

De esta manera, la estructura del directorio de nuestro proyecto debería ser algo así:

123456|─ com.example.programming|| |─ module-info.java| |─ com| |─ example| |─ programming| |─ ProgrammingQuotes.java

En el archivo module-info.java, puedes hacer lo siguiente:

  • Dale un nombre a tu módulo
  • Requiere otros módulos
  • Exportar paquetes desde su módulo

En este caso, puede ser tan simple como:

12module com.example.programming {}

Ahora abre una ventana de terminal, asegúrate de grabar en el directorio base y compila como siempre:

1javac -d out module-info.java com/example/programminming/ProgrammingQuotes.java

El directorio de salida se creará con los archivos compilados .class para module-info.java y ProgrammingQuotes.java.

A continuación, empaquetar la clase en un JAR modular:

1jar cvfe programming-quote.jar com.example.programming.ProgrammingQuotes -C out .

Esto creará el archivo programming-quote.jar, incluyendo todas las clases que se encuentran en el directorio out y con com.example.programming.ProgrammingQuotes como clase principal.

Ahora, hazlo con..:

1java -jar programming-quote.jar

Por supuesto, toda esta compilación/empaquetado/ejecución se puede hacer con un IDE, pero quería mostrarte que los comandos que hacen estas tareas no han cambiado.

Sin embargo, para ejecutar este programa como un módulo, hay que especificar la ruta de módulo (que contiene módulos, a diferencia de la ruta de clase que contiene clases) con la opción –módulo-ruta (o sólo -p) y el módulo/clase principal con la opción –módulo (o sólo -m), en el formato módulo/clase:

1java --módulo-ruta de programación-quota.jar --módulo-com.ejemplo.programación/com.ejemplo.programación.programa-quotas

Alternativamente, puedes usar el directorio de salida que contiene las clases de compilación:

1java --modulo-path out --modul com.example.programming/com.example.programming.ProgrammingQuotes

Sin embargo, cuando su aplicación tiene más que módulos, estas opciones se convierten en obligatorias en los comandos anteriores.

En la siguiente guía, «Getting Started with the Java Platform Module System Part 2», aprenderá más sobre los módulos y cómo trabajar con los servicios de ServiceLoader.