Автоматизированная сборка 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, но для выполнения вышеуказанного требования нам всё ещё нужно проделать дополнительную работу.

Можно использовать два метода:

  • Добавьте операцию goal после сборки в pom-файл проекта bus-core-api, чтобы запускать сборки проектов 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> <цель>запуск</цель> </цели> </выполнение> </выполнения> </плагин> </плагины> </сборка> </проект>

Откройте консоль команд, перейдите в каталог 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] [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] ------------------------------------------------------------------

После успешной сборки bus-core-api Maven начнёт сборку проекта 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] ------------------------------------------------------------------

После успешной сборки 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\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

Использование сервера непрерывной интеграции (CI)

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

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

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

Другие расширения