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

Автоматическая будова Maven

Автоматическое строительство определяет такую ситуацию: после успешного завершения строительства проекта, начинаются строительство связанных зависимых проектов, что гарантирует стабильность зависимых проектов.

Например, команда разрабатывает проект bus-core-api, и у нее есть еще два проекта app-web-ui и app-desktop-ui, которые зависят от этого проекта.

Проект app-web-ui использует снапшот версии 1.0 проекта 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>

Проект app-desktop-ui использует снапшот версии 1.0 проекта 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>

Проект 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>

В настоящее время команда проекта app-web-ui и app-desktop-ui требует, чтобы их процесс сборки мог запускаться независимо от изменений в проекте bus-core-api.

Использование снапшотов гарантирует использование последней версии проекта bus-core-api, но для достижения вышеуказанных требований потребуется выполнить дополнительные работы.

Существует два способа:

  • Добавить в файл pom проекта bus-core-api цель post-build для запуска сборки проектов app-web-ui и app-desktop-ui.

  • Использование сервера непрерывной интеграции (CI), например, Hudson, для управления автоматизацией сборки.

Использование Maven

Редактировать файл pom.xml проекта 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>

Откройте командную консоль, перейдите в папку C:\ > MVN > bus-core-api и выполните следующие команды.

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

После выполнения команды, Maven начнет строительство проекта bus-core-api.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO]    task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
...
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------

После успешного завершения строительства bus-core-api, Maven начнет строительство проекта app-web-ui.

[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui 
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------
...
...
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------

После успешного завершения 构建 app-web-ui, Maven начнет строительство проекта 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\
[INFO] Успешное строительство
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] Успешное строительство

[INFO] -------------------------------------------------------------------

Использование CI сервера (CI)

Если использовать CI сервер, то при добавлении нового проекта, например, app-mobile-ui в качестве зависимого проекта bus-core-api, разработчику не нужно обновлять pom файла проекта bus-core-api. Hudson будет использовать функцию управления зависимостями Maven для автоматического создания проекта.

Hudson рассматривает каждый процесс строительства как задачу. После того как код проекта будет отправлен в SVN (или любое другое инструмент управления кодом, которое настроено на Hudson), Hudson начнет задачу строительства проекта, и как только задача строительства будет завершена, Hudson автоматически запустит задачи строительства других зависимых проектов (строительство других зависимых проектов).