English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Costruzione automatizzata Maven

La costruzione automatizzata definisce questo scenario: dopo che un progetto è stato costruito con successo, le sue dipendenze correlate iniziano a costruire, garantendo la stabilità dei progetti dipendenti.

Ad esempio, un team sta sviluppando un progetto bus-core-api e altri due progetti app-web-ui e app-desktop-ui dipendono da questo progetto.

Il progetto app-web-ui utilizza la versione snapshot 1.0 del progetto bus-core-api:

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

Il progetto app-desktop-ui utilizza la versione snapshot 1.0 del progetto bus-core-api:

<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>
   <dependencies>
      <dependency>
      <groupId>bus-core-api</groupId>
         <artifactId>bus-core-api</artifactId>
         <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

Progetto bus-core-api:

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

Ora il team del progetto app-web-ui e app-desktop-ui richiede che il loro processo di costruzione possa essere avviato indipendentemente da quando il progetto bus-core-api cambia.

L'uso di snapshot garantisce che venga utilizzato l'ultimo progetto bus-core-api, ma per soddisfare i requisiti sopra menzionati, dobbiamo fare ulteriori lavoro.

Ci sono due modi per farlo:

  • Aggiungi un'operazione di obiettivo post-build nel file pom del progetto bus-core-api per avviare la costruzione dei progetti app-web-ui e app-desktop-ui.

  • Usa un server di integrazione continua (CI) come Hudson per gestire automaticamente la costruzione.

Usa Maven

Modifica il file pom.xml del progetto bus-core-api.

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

Aprire la console dei comandi, passare alla directory C:\ > MVN > bus-core-api e poi eseguire i seguenti comandi.

C:\MVN\bus-core-api>mvn clean package -U

Dopo l'esecuzione dell'ordine, Maven inizierà a costruire il progetto 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] ------------------------------------------------------------------

Dopo il successo della costruzione di bus-core-api, Maven inizierà a costruire il progetto app-web-ui.

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

Dopo il successo della costruzione di app-web-ui, Maven inizierà a costruire il progetto app-desktop-ui.

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

Utilizzo del server di integrazione continua (CI)

Se si utilizza un server CI, ogni volta che si aggiunge un nuovo progetto, ad esempio app-mobile-ui nell'esempio, come dipendenza del progetto bus-core-api, gli sviluppatori non devono aggiornare il file pom del progetto bus-core-api. Hudson utilizzerà la funzione di gestione delle dipendenze di Maven per implementare la creazione automatica del progetto.

Hudson considera ogni costruzione di progetto come un'attività. Dopo che il codice del progetto viene inviato a SVN (o qualsiasi strumento di gestione del codice mappato a Hudson), Hudson inizia l'attività di costruzione del progetto e, una volta completata questa attività di costruzione, Hudson avvia automaticamente altre attività di costruzione dipendenti (costruzione di progetti di dipendenza)

Nell'esempio sopra, quando il codice sorgente di bus-core-ui viene aggiornato in SVN, Hudson inizia la costruzione del progetto. Una volta completata la costruzione, Hudson cerca automaticamente i progetti dipendenti e inizia a costruire i progetti app-web-ui e app-desktop-ui.