0Pricing
Java Academy · Lección

Migración a módulos

Módulos automáticos y sin nombre

Migración a módulos es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Modularizar código existente

Pocos proyectos adoptan los módulos desde el primer día. JPMS se diseñó para una migración gradual, permitiendo que el classpath y la ruta de módulos coexistan.

Las claves son los módulos automáticos y el módulo sin nombre.

El módulo sin nombre

Todo lo que se carga desde el classpath vive en el único módulo sin nombre. Este lee todos los demás módulos y exporta todos sus paquetes.

Es el puente que mantiene funcionando el código antiguo basado en el classpath.

Un módulo con nombre no puede leer el módulo sin nombre

Una regla fundamental: un módulo con nombre explícito no puede depender del módulo sin nombre. No puede escribir requires para código del classpath.

Por eso debe migrar de abajo arriba: convierta primero la representación de las dependencias.

Módulos automáticos

Coloque un JAR normal (no modular) en la ruta de módulos y se convertirá en un módulo automático. Obtendrá un nombre derivado automáticamente, leerá todos los demás módulos y exportará todos sus paquetes.

Esto permite que los módulos con nombre declaren requires para un JAR que todavía no tiene module-info.

De dónde proviene el nombre

El nombre de un módulo automático se deriva siguiendo este orden de preferencia:

  • La entrada Automatic-Module-Name del manifiesto del JAR, si está presente
  • De lo contrario, del nombre del archivo JAR (sin la versión y con los guiones convertidos en puntos)

Los nombres estables son importantes

Los autores de bibliotecas deberían añadir Automatic-Module-Name a su manifiesto antes de modularizar por completo. Así garantizan un nombre de módulo estable, de modo que las cláusulas requires posteriores sigan funcionando cuando llegue el module-info real.

Automatic-Module-Name: com.example.json

Estrategia de arriba abajo

El enfoque recomendado para su propia aplicación es:

  • Mantener las dependencias como módulos automáticos en la ruta de módulos
  • Añadir primero un module-info.java a su módulo superior
  • Declarar requires para los nombres de esos módulos automáticos

Ejemplo de un paso de migración

Suponga que guava-32.jar se encuentra en la ruta de módulos como el módulo automático com.google.common. El módulo de su aplicación ya puede declararlo mediante requires.

module com.example.app {
    requires com.google.common;
    exports com.example.app.api;
}

Problema de los paquetes divididos

El sistema de módulos prohíbe que dos módulos contengan el mismo paquete. Las bibliotecas antiguas que dividen un paquete entre varios JAR provocan errores.

Puede solucionarlo fusionando los JAR, usando --patch-module o actualizando a versiones que resuelvan la división.

Problemas de acceso mediante reflexión

Los frameworks que realizan reflexión profunda pueden fallar con InaccessibleObjectException una vez que modularice el código. Añada directivas opens o, como puente temporal, la opción de lanzamiento --add-opens.

La útil herramienta jdeps

La herramienta jdeps analiza sus JAR, informa de las dependencias, detecta usos de API internas del JDK y puede incluso generar un module-info.java candidato mediante jdeps --generate-module-info.

Ejecute esta herramienta primero para planificar la migración.

Comprobación rápida

Recuerde cómo obtiene un JAR normal su identidad de módulo.

Resumen

Ha aprendido técnicas de migración:

  • El código del classpath vive en el módulo sin nombre; los módulos con nombre no pueden declararlo mediante requires
  • Los JAR normales situados en la ruta de módulos se convierten en módulos automáticos
  • Establezca Automatic-Module-Name para obtener nombres estables
  • Preste atención a los paquetes divididos y al acceso mediante reflexión; use jdeps para planificar

Con esto finaliza el curso de JPMS.

Preguntas frecuentes

¿La lección «Migración a módulos» es gratis?

Sí — el texto completo de «Migración a módulos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Migración a módulos»?

Módulos automáticos y sin nombre Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Migración a módulos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. module-info.java
  2. requires y exports
  3. Servicios con provides/uses
  4. Migración a módulos
← Volver a Java Academy