====== 07 - La Forja: proyecto profesional ====== Todas las clases viven en el paquete por defecto, el fichero de configuración se parsea a mano y compilar la aplicación de otro compañero depende de dónde tenga colgado cada ''.class''. El paso aplica el tema: **paquetes e importaciones, librerías externas y Apache Maven**. ===== 1. Qué se pide ===== * El proyecto se organiza en **paquetes** con un paquete base propio: cada clase en el paquete por su responsabilidad, y las **importaciones** explicitando qué depende de qué — el compilador será el juez de que la dependencia se vea. * La aplicación se convierte en un **proyecto Maven**: estructura estándar, ''pom.xml'' con las **coordenadas** del proyecto y su ciclo de vida. Se construye con Maven, no con botones del IDE. El resultado: un **artefacto** con nombre y versión, listo para compartir. * El fichero de configuración pasa de propiedades a **JSON**, parseado con una **librería externa** gestionada por Maven (en clase: **Gson**). El parseo a mano de clave a clave desaparece: el JSON se mapea directamente a una **clase** del proyecto. * La lectura del fichero mantiene la protección del paso 05 (fichero ausente, JSON con claves imposibles...), ahora con las excepciones de la librería además de las del fichero. * Todas las pruebas anteriores siguen pasando — ahora, sin "paquete por defecto" en ningún sitio. ===== 2. Con qué ===== * Todo lo del tema: **paquetes** e importaciones, el **classpath** (entenderlo permite resolverlo a mano, y por eso Maven conviene), el ''pom.xml'' (coordenadas, **propiedades**, **dependencias**, **repositorios**) y el **ciclo de vida** de Maven (''compile'', ''test'', ''package''...). * La dependencia de Gson se añade declarándola, sin descargar **JAR** a mano ni pelear con el classpath — y fijando una versión exacta de la librería en el ''pom.xml''. ===== 3. Decisiones tuyas ===== * ¿Cómo se llama el paquete base y en qué paquetes reparte las clases? Aún no hay capas (eso será el 08), pero separa ya lo que como mínimo no va junto: lo que arranca el programa, lo que modela el gremio y lo que lee la configuración. * ¿Qué forma toma el JSON de configuración? Piensa en las claves del paso 05, no copies: re-plantéalo como objeto con tipos. * ¿El objeto de configuración queda genérico o ajustado a La Forja? ¿Y quién hace las comprobaciones de los valores: el parser o la propia clase? * ¿De qué groupId/artifactId/version monta el proyecto? ¿Y qué significado le das a un ''SNAPSHOT'' inicial? ===== 4. Comprobación ===== * ''mvn clean package'' corre solo: compila, empaqueta y deja el artefacto en ''target/''; ningún ''.class'' suelto por el proyecto. * En cualquiera de las clases puede verse, por sus importaciones, de qué otras depende; el compilador se queja si el reparto por paquetes se trastoca. * El fichero de configuración en JSON carga y los valores llegan tipados (comprueba el límite de plazas y un bono de clase). * Un JSON con una clave con formato imposible falla con la excepción concreta; el fichero ausente avisa como en el paso 05. * Un compañero descarga tu artefacto (o tu repositorio) y lo construye con Maven sin tu ayuda: esa es la prueba de oro. * Las pruebas de los pasos anteriores pasan enteras. ===== 5. Pendientes ===== * La consola llama directamente a las colecciones y a las reglas de negocio: sin separación de responsabilidades -> arquitectura por capas (**08**). * El estado del gremio sigue viviendo en variables ''static'' -> objetos propios de cada capa (**08**).