Maven - Automatización de la construcción
Build Automation define el escenario en el que el proceso de construcción de proyectos dependientes se inicia una vez que la construcción del proyecto se completa con éxito, para garantizar que los proyectos dependientes sean estables.
Example
Considere que un equipo está desarrollando un proyecto bus-core-api en el que otros dos proyectos app-web-ui y app-desktop-ui son dependientes.
app-web-ui el proyecto utiliza 1.0-SNAPSHOT de bus-core-api proyecto.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-web-ui</groupId>
<artifactId>app-web-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
app-desktop-ui el proyecto utiliza 1.0-SNAPSHOT de bus-core-api proyecto.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app_desktop_ui</groupId>
<artifactId>app_desktop_ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>app_desktop_ui</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
bus-core-api proyecto -
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
Ahora, equipos de app-web-ui y app-desktop-ui Los proyectos requieren que su proceso de construcción se inicie siempre que bus-core-api cambios en el proyecto.
Usando instantáneas, se asegura de que la última bus-core-api Se debe usar el proyecto, pero para cumplir con el requisito anterior, debemos hacer algo adicional.
Podemos proceder de las siguientes dos formas:
Agregue un objetivo posterior a la compilación en bus-core-api pom al inicio app-web-ui y app-desktop-ui construye.
Utilice un servidor de integración continua (CI) como Hudson para gestionar la automatización de la construcción de forma automática.
Usando Maven
Actualizar bus-core-api proyecto pom.xml.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.6</version>
<configuration>
<debug>true</debug>
<pomIncludes>
<pomInclude>app-web-ui/pom.xml</pomInclude>
<pomInclude>app-desktop-ui/pom.xml</pomInclude>
</pomIncludes>
</configuration>
<executions>
<execution>
<id>build</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
</project>
Abramos la consola de comandos, vamos a la C:\ > MVN > bus-core-api directorio y ejecute lo siguiente mvn mando.
>mvn clean package -U
Maven comenzará a construir el proyecto bus-core-api.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
Una vez bus-core-api la construcción es exitosa, Maven comenzará a construir el app-web-ui proyecto.
[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
Una vez app-web-ui la construcción es exitosa, Maven comenzará a construir el app-desktop-ui proyecto.
[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
Uso del servicio de integración continua con Maven
El uso de un servidor CI es más preferible que los desarrolladores. No es necesario actualizar elbus-core-api proyecto, cada vez que se agrega un nuevo proyecto (por ejemplo, app-mobile-ui), como proyecto dependiente de bus-core-apiproyecto. Hudsion es una herramienta de integración continua escrita en Java, que en un contenedor de servlets, como Apache tomcat y el servidor de aplicaciones Glassfish. Hudson gestiona automáticamente la automatización de la compilación mediante la gestión de dependencias de Maven. La siguiente instantánea definirá el papel de la herramienta Hudson.
Hudson considera que cada construcción del proyecto es un trabajo. Una vez que el código de un proyecto se registra en SVN (o cualquier herramienta de administración de fuentes asignada a Hudson), Hudson comienza su trabajo de compilación y una vez que este trabajo se completa, comienza otros trabajos dependientes (otros proyectos dependientes) automáticamente.
En el ejemplo anterior, cuando bus-core-uiEl código fuente se actualiza en SVN, Hudson comienza su compilación. Una vez que la construcción tiene éxito, Hudson busca proyectos dependientes automáticamente y comienza a construirapp-web-ui y app-desktop-ui proyectos.