Maven - Automatisation de la construction

Build Automation définit le scénario dans lequel le processus de construction du ou des projets dépendants démarre une fois que la construction du projet est terminée avec succès, afin de garantir la stabilité du ou des projets dépendants.

Example

Considérez qu'une équipe développe un projet bus-core-api sur lequel deux autres projets app-web-ui et app-desktop-ui sont dépendants.

app-web-ui le projet utilise 1.0-SNAPSHOT de bus-core-api projet.

<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 le projet utilise 1.0-SNAPSHOT de bus-core-api projet.

<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 projet -

<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>

Désormais, des équipes de app-web-ui et app-desktop-ui les projets exigent que leur processus de construction démarre chaque fois bus-core-api changements de projet.

L'utilisation de snapshot garantit que la dernière bus-core-api project doit être utilisé, mais pour répondre à l'exigence ci-dessus, nous devons faire quelque chose de plus.

Nous pouvons procéder des deux manières suivantes -

  • Ajouter un objectif post-build dans bus-core-api pom au coup d'envoi app-web-ui et app-desktop-ui construit.

  • Utilisez un serveur d'intégration continue (CI) comme Hudson pour gérer automatiquement l'automatisation de la construction.

Utiliser Maven

Mettre à jour bus-core-api projet 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>

Ouvrons la console de commande, allons à la C:\ > MVN > bus-core-api répertoire et exécutez ce qui suit mvn commander.

>mvn clean package -U

Maven commencera à construire le projet 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] ------------------------------------------------------------------

Une fois que bus-core-api build réussit, Maven commencera à construire le app-web-ui projet.

[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] ------------------------------------------------------------------

Une fois que app-web-ui build réussit, Maven commencera à construire le app-desktop-ui projet.

[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] -------------------------------------------------------------------

Utilisation du service d'intégration continue avec Maven

L'utilisation d'un serveur CI est plus préférable aux développeurs. Il n'est pas nécessaire de mettre à jour lebus-core-api projet, chaque fois qu'un nouveau projet (par exemple, app-mobile-ui) est ajouté, en tant que projet dépendant de bus-core-apiprojet. Hudsion est un outil d'intégration continue écrit en java, qui se trouve dans un conteneur de servlet, tel que Apache tomcat et le serveur d'applications glassfish. Hudson gère automatiquement l'automatisation des builds à l'aide de la gestion des dépendances Maven. L'instantané suivant définira le rôle de l'outil Hudson.

Hudson considère chaque construction de projet comme un travail. Une fois qu'un code de projet est archivé dans SVN (ou tout outil de gestion de source mappé à Hudson), Hudson démarre sa tâche de construction et une fois cette tâche terminée, il démarre automatiquement d'autres tâches dépendantes (autres projets dépendants).

Dans l'exemple ci-dessus, quand bus-core-uile code source est mis à jour dans SVN, Hudson commence sa construction. Une fois la construction réussie, Hudson recherche automatiquement les projets dépendants et commence la constructionapp-web-ui et app-desktop-ui projets.