Normas para proyectos Maven con tecnología Java en la Plataforma Pre-Cloud

Contenido

Cada tipo de desarrollo requiere un conjunto de normas específicas para su desarrollo y gestión. Por ejemplo, los productos desarrollados con Maven requieren una serie de directrices específicas en cuanto a su estructura y configuración, mientras que los productos basados en Angular requieren un enfoque diferente en cuanto a la gestión de dependencias y versiones, por poner algunos ejemplos. 

Por esta razón, se ha establecido un conjunto de normas específicas para cada uno, buscando asegurar la calidad y estabilidad de los productos a desarrollar. Además, esto permite ser más eficientes en el desarrollo, ya que la normalización permite que se puedan utilizar automatismos para la construcción, empaquetado y despliegue.

Estructura del proyecto

 Obligatorio

Con el objetivo de descentralizar dependencias y repositorios, y proponer así una estructura de proyecto única y uniforme en proyectos Java, se recomienda el uso de "Standard Directory Layout".

mvn archetype:generate

Para buscar en la lista un arquetipo que se ajuste a la tecnología que se va a emplear y que cree la estructura necesaria. 

Lugar del pom.xml padre

El pom.xml padre se creara en la raíz del proyecto.

Standard Directory Layout

  • maven-project
  • pom.xml
  • README.txt
  • NOTICE.txt
  • LICENSE.txt
  • test
    • java
    • resources

Directorio principal

Es el directorio raíz de cada proyecto de Maven, estos son los archivos y directorio que debe de tener este directorio:

Ruta: Descripción

proyecto-maven/src/test: Contiene todo el código de prueba y los recursos

proyecto-maven/src/site: Documentación del sitio creada con el plugin Maven Site Plugin

proyecto-maven/src/main: Contiene el código fuente y los recursos para la construcción del artefacto

proyecto-maven/src/it: Reservado para las pruebas de integración

proyecto-maven/src/assembly: Resumen del proyecto

proyecto-maven/pom.xml: Define las dependencias y los módulos necesarios durante el ciclo de vida de construcción del proyecto

proyecto-maven/NOTICE.txt: Información sobre bibliotecas de terceros utilizadas en el proyecto

proyecto-maven/LICENSE.txt: Información de licencia del proyecto

Directorio principal src

El directorio mas importante de un proyecto Maven, todo lo que forme parte de un artefacto ya sea un jar o war debe estar presente aquí

Dentro de src se deben tener los siguientes subdirectorios:

Ruta: Descripción

src/main/java: El código fuente de Java para el artefacto

src/main/resources: Directorio utilizado para los archivos de configuración, configuraciones XML,ect.

src/main/webapp: Directorio para aplicaciones web, contiene los recursos de JavaScript, CSS, archivos HTML, plantillas e imágenes

src/main/filters: Contiene archivos que inyectan valores en las propiedades de configuración en la carpeta de recursos durante la fase de compilación

Directorio src/test

El directorio src/test es el lugar donde residen las pruebas de cada componente en la aplicación, estos directorios o archivo no formarán parte del artefacto.

Debe de contener los siguiente subdirectorios:

Ruta: Descripción

src/test/java: Código fuente Java para las pruebas

src/test/resources: Archivos de configuración y otros que sean utilizados por las pruebas

src/test/filters: Archivos de configuración y otros que sean utilizados por las pruebas

Coordenadas

 Obligatorio

La convención para nomenclatura de las coordenadas del pom.xml serán las siguientes:

  • GroupID: es.juntadeandalucia.<SistemaInformacion>
  • ArtifactID: NombreComponente
  • Versión: X.Y.Z / X.Y.Z-SNAPSHOT (para versiones snapshots)

Nota: Snapshots: versiones candidatas a liberar que actualmente no son estables.

El repositorio rechazará las subidas que no cumplan con el patrón:

  • es/juntadeandalucia/*

Se admitirán por compatibilidad los siguientes, no debiendo usarse para nuevos desarrollos:

  • es/junta-andalucia/*
  • es/jda/*

Creación del fichero README.md y CHANGELOG.md

 Obligatorio

Se crearán los ficheros README.md, con información de interés para la construcción (como por ejemplo, instrucciones de compilación y empaquetado), así como un fichero CHANGELOG.md que para realizar el control de cambios.

Formato del fichero CHANGELOG.md

 Recomendado

Se recomienda seguir las buenas prácticas descritas en "Keep a Changelog"

Dependencias del proyecto

 Obligatorio

No se deben definir intervalos de versiones en las dependencias del pom.xml, por ejemplo:

<version>[1.1.15,1.2.0)</version>, no es una opción válida. Se tienen que proporcionar versiones cerradas.

Plugin JaCoCo

 Obligatorio

Para el análisis de la cobertura se utilizará la herramienta JaCoCo. Como resultado de la ejecución de la herramienta, se generará un fichero jacoco.xml que permitirá cargar la información generada en otras herramientas de visualización, que en nuestro caso será SonarQube. Para utilizar JaCoCo en el proyecto, se debe incluir en el pom.xml de los productos en los que se deba realizar el análisis de cobertura el siguiente plugin, con la configuración indicada:

<plugin>

    <groupId>org.jacoco</groupId>

    <artifactId>jacoco-maven-plugin</artifactId>

    <version>0.8.6</version>

    <executions>

        <execution>

            <id>jacoco-initialize</id>

            <goals>

                    <goal>prepare-agent</goal>

            </goals>

        </execution>

        <execution>

            <id>jacoco-site</id>

            <phase>test</phase>

            <goals>

                    <goal>report</goal>

            </goals>

            <configuration>

                <formats>

                    <format>XML</format>

                </formats>

            </configuration>

        </execution>

    </executions>

</plugin>

La ubicación del fichero jacoco.xml como otras configuraciones para la carga automatizada en SonarQube se realizarán sobre el fichero sonar.properties. Por ejemplo:


sonar.projectKey=es.juntadeandalucia.pruebaswebapp

sonar.projectName=pruebasWebApp

sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml


sonar.sources=src

sonar.java.binaries=target/**

sonar.junit.reportsPath=reports/java/surefire-reports


sonar.sourceEncoding=UTF-8

http.proxyHost=proxy.chap.junta-andalucia.es

http.proxyPort=3128
Índice