Región de Murcia Consejería de Educación, Universidades y Empleo D.G. de Infraestructura y Promoción Educativo Servicio de Gestión Informática Avda. de La Fama, 15 30006 MURCIA www.carm.es/educacion Guía para la estructuración de proyectos maven GUÍA PARA LA ESTRUCTURACIÓN DE PROYECTOS MAVEN _________________________ 1 INTRODUCCIÓN ____________________________________________________________________ 1 ESTRUCTURA DE UN PROYECTO JAVA ___________________________________________________ 1 VERSIONADO ______________________________________________________________________ 3 INTEGRACIÓN CONTINUA _____________________________________________________________ 3 PUBLICACIÓN EN ARTIFACTORY _______________________________________________________ 3 DESPLIGUE DE LA APLICACIÓN EN UN SERVIDOR ___________________________________________ 3 Introducción Este documento describe la estructura general de una aplicación Java integrado en el marco de desarrollo de aplicaciones y con el framework de desarrollo. Estructura de un proyecto Java Un proyecto será un conjunto de módulos. Todo proyecto debe partir obligatoriamente de un arquetipo de tipo proyecto y el desarrollo de cualquier módulo de un proyecto serán submódulos de éste, que obligatoriamente se deben hacer partiendo del arquetipo correspondiente al módulo en cuestión. Nombre del arquetipo war.archetype jar.archetype ws.archetype prj.archetype Descripción Genera un proyecto Maven war que integra JSF, Spring y la capa de servicios web. Genera un proyecto Maven jar básico. Genera un peyecto Maven war que viene preparado para la implementación de un servicio web. Genera el proyecto de partida para cualquier aplicación. Todo módulo del proyecto deberá ser submódulo de éste. Tipo de módulo Módulo web (aplicación web) Módulo jar (librería) Módulo servicio web Proyecto El nombre del proyecto será el nombre de la apliación. (ej: libro). Las aplicaciones se dividirán principalmente en dos partes: el back y el front. Los módulos residen dentro del proyecto y se nombran xxx-back y xxx-front (ej: libroback, libro-front). o Dentro del Back se encontrará la definición de la lógica de negocio y su implementación como la definición de los servicios web/rest. o La estructura del modulo back se descompone en: dao, restful, ws, web. No tiene que estar todos los tipos de proyectos. Cada subproyecto añade el sufijo del tipo de módulo (ej: libro-back-dao, libro-back-restful…) Ubicación CVS: interno/recursos/documentacion/guia_desarrollo.doc Pagina 1 de 3 Región de Murcia Consejería de Educación, Universidades y Empleo D.G. de Infraestructura y Promoción Educativo Servicio de Gestión Informática Avda. de La Fama, 15 30006 MURCIA www.carm.es/educacion El módulo ‘dao’ contendrá la definición de las interfaces dao, los pojos, su implementación y los mocks. Para cada servicio ‘xxx’ debe existir un paquete ‘es.carm.edu.app.dao.xxx’ que contenga: La interfaz dao: xxxServiceDao.java El pojo: xxx.java El mock: xxxServiceDaoMock.java La implementación del servicio: xxxServiceDaoImpl.java Mappers ibatis: xxxMapper.java El módulo ‘restful’ contendrá la especificación de un servicio Rest, las rutas, los métodos (GET,POST, PUT y DELETE) y los servicios en los que se apoya para su implementación. Para cada servicio rest debe existir un paquete ‘es.carm.edu.app.serviceRS’ que contenga: Para cada servicio ‘xxx’ rest, una clase xxxService.java El módulo ‘ws’ contendrá la definición de un servicio web y su correspondiente cliente (en un submódulo de éste). Para cada implementación del servicio ‘xxx’ existirá un paquete ‘es.carm.edu.app.serviceWS’ que contenga: Para cada servicio ‘xxx’ ws, una clase xxxService.java Un submódulo maven ws-client (ej: libro-back-ws-client) con la implementación del cliente de ws. El módulo ‘web’ es opcional y contendrá una aplicación web que expondrá únicamente servicios web o rest. No tiene frontal accesible a usuarios. Pero puede estar configurada con SSO CAS. En la configuración spring se dará de alta los servicios y se configurará las dependencias de éstos, conexiones a bbdd, a ldap, a otros servicios web, etc… El fichero ‘application.properties’ contendrá los parámetros de configuración de la aplicación. Las variables que dependan de desarrollo o de producción (ip de servicios web) deberán trasladarse al fichero ‘deploy.properties’. El fichero ‘deploy.proerties’ no pertenece a la aplicación. Es manejado por sistemas. Configura el servidor donde será alojada la aplicación war. o El front dependerá de la tecnología de presentación elegida (JSF o AngularJS) el nombre del proyecto será app-front (ej: libro-front) En la configuración spring se dará de alta los servicios y se configurará las dependencias de éstos, conexiones a bbdd, a ldap, a otros servicios web, etc… El fichero ‘application.properties’ contendrá los parámetros de configuración de la aplicación. Las variables que dependan de desarrollo o de producción (ip de servicios web) deberán trasladarse al fichero ‘deploy.properties’. El fichero ‘deploy.proerties’ no pertenece a la aplicación. Es manejado por sistemas. Configura el servidor donde será alojada la aplicación war. Usando AngularJS Ubicación CVS: interno/recursos/documentacion/guia_desarrollo.doc Pagina 2 de 3 Región de Murcia Consejería de Educación, Universidades y Empleo D.G. de Infraestructura y Promoción Educativo Servicio de Gestión Informática Avda. de La Fama, 15 30006 MURCIA www.carm.es/educacion Se puede dividir el front en dos módulos: front-web y frontrest para dividir la aplicación de los servicios rest que ésta expone para su reutilización por otras aplicaciones angular. (ej: libro-front-web y libro-front-rest). Versionado Todos los proyectos deben versionarse utilizando los mecanismos de versionado que ofrece Maven, utilizando la etiqueta <version> que se encuentra dentro del fichero pom.xml. Siempre que se realicen modificaciones sobre un módulo y se proceda a una entrega (en cualquier entorno) se ha de modificar el número de versión. El número de versión estará formado por tres digitos. Integración continua Además de dar de alta el proyecto en CVS, hay que darlo de alta en Jenkins, para introducirlo en el sistema de integración continua. Jenkins es un software de integración continua open source escrito en Java. Jenkins proporciona integración continua para el desarrollo del software Publicación en Artifactory Artifactory es un repositorio de artefactos maven. Las piezas que componen todas las aplicaciones. No están permitida la publicación directa en Artifactory. Ha de ser Jenkins quien haga la publicación. De esta forma todos los proyectos usarán las mismas piezas de código y si un commit en CVS produce una descompilación de otros paquetes, Jenkins se da cuenta y no permite la publicación en Artifactory. Mantiendo estable el repositorio. Despligue de la aplicación en un servidor Actualmente esta tarea se hace desde Natalia. Y simplemente lo que hace es descargarse el war directamente de Artifactory y lo deposita en el servidor correspondiente. Así se evita que se despliegue una war sin haber pasado por CVS, por Jenkins y Artifactory. Ubicación CVS: interno/recursos/documentacion/guia_desarrollo.doc Pagina 3 de 3