jueves, 23 de agosto de 2018

Maven (1) Crear, compilar y ejecutar proyectos java

0. Introducción


Esta no va a ser una entrada estándar. Se van a poner enlaces para su aprendizaje, solo se indica esquemáticamente las ideas.

1. Etiquetas principales del POM


No vamos a hablar de la instalación de Maven ya gracias al plugin de Eclipse.

En Baeldung Maven-1 hay una magnífica introducción a Maven, aprendemos las etiquetas básical sel POM (project object model):

  • Identificativos del proyecto: groupId (grupo de proyectos), artifactId (nombre único del proyecto), version(1.0-SNAPCHOT, 3.2, etc), packaging (war, zip, jar).
  • Dependencias (ver Baeldung Maven-2): En una dependencia (<dependency>)definimos los identificativos del proyecto de la dependencia (groupId, artifactId, versión) junto al alcance (scope) y el tipo (type). Los scope (<scope>)pueden ser compile (por omisión, que son las que se incluyen en el classpath), el scope provided (cuya dependencia está suministrada por el JDK, o container), el scope runtime (que se deben suministrar en tiempo de ejecución, como los JDBC),  el scope test (que solamente estan presentes en tests y classpaths de ejecución), el scope import (para dependenias de tipo pom, en que las dependencias efectivas se sustituyen por las indicadeas en la referencia al pom),y el scope system (donde la dependencia está guardada en el sistema, y por tanto al exportar el proyecto, hay que adjuntar esta dependencia o por el contrario el programa no correrá)
  • Repositorios (<repository>), pueden haber  varios repositorios. Lo normal es que se guarden en Maven Central, pero por ejemplo JBOSS tiene su repositorio. Hay que indicar id y url.
  • Propiedades (<property>) donde se definen rutas, versiones etc y se referencian con el tag.
  • Build (<build>) Suministra información sobre el objetivo principal (<defaultGoal>), el directorio del programa compilado (<directory>, que por omisión es target), el nombre final de la aplicación (<finalName>) y ... (El build puede estar también dentro de un perfil que se explica a continuación)
  • Perfiles (<profile>), que son un conjunto de valores de configuración. Se pueden tener para producción, desarrollo etc, para ello hay que indicar el id (<id>), si están activados por omisión (<activeByDefault>), build(<build>) con sus plugins etc.
Si queremos ejecutar un perfil se hace desde la línea de comandos

mvn clean install -PmiPerfil     

siendo  miPerfil el nombre de perfil que hemos definido. en Eclipse con el boton derecho sobre el pom.xml se escoge "maven build ..." y se indica en Goals todo lo que hay despúes del comando mvn 




2. Ciclo de vida del Build de Maven


Se pueden ejecutar varios objetivos (goals) del ciclo de vida. Veamos las fases del ciclo de vida
  • validate: Comprueba que el proyecto se correcto.
  • compile: compila el código fuente en artefactos (artifacts) binarios
  • test: ejecuuta los "unit tests"
  • package: empaqueta el código compilado en un archivo (jar, war , zip...)
  • integration-test: ejecuta tests adoicionales que requieren el empaquetado
  • verify: comprueba si el paquete es válido
  • install: instala el paquete (fichero) en el repositorio Maven local
  • deploy: despliegael paquete en un servidor remoto o repositorio.
Un plugin es un conjunto de uno o mas goals. Los goals se ejecutan en fases. Por ejemplo clean es un plugin que limpia los builds anteriores.

Para ejecutar una fase cualquiera (no poner los "<" ">")

mvn <phase>


3. Generar un proyecto java simple


Creamos un proyecto maven en Eclipse o ejecutamos en linea de comandos:


mvn archetype:generate
  -DgroupId=org.grupo
  -DartifactId=org.grupo.subgrupo 
  -DarchetypeArtifactId=maven-archetype-quickstart
  -DinteractiveMode=false

Por omisión la versión que crea es 1.0-SNAPSHOT y tambien crea la dependencia de junit. Genera ese pom.xml


<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.grupo</groupId>
    <artifactId>org.grupo.subgrupo</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>org.grupo.subgrupo</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.1.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>


4. Compilar y empaquetar el proyecto


Ejecutamos

mvn compile  para compilar

mvn test para hacer solo los test

mvn package para crear un jar

5. Compilar y ejecutar mediante plugins

Para simplificar, en el <build> se utilizan 2 plugins,. el primero es estandard de maven (compiler) y se usa para definir la versión de java 1.8 . El segundo plugin es casi estandar (de codehaus.org o MojoHaus) que se llama exec en el cual definimos la clase que contiene el main (<mainClass>)


<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <mainClass>org.proyecto.subproyecto.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Y se ejecuta con

mvn exec:java


No hay comentarios :

Publicar un comentario