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-Namedel 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.jsonEstrategia 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.javaa su módulo superior - Declarar
requirespara 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-Namepara obtener nombres estables - Preste atención a los paquetes divididos y al acceso mediante reflexión; use
jdepspara 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
- module-info.java
- requires y exports
- Servicios con provides/uses
- Migración a módulos