Автоматизация сборки определяет сценарий, в котором процесс сборки зависимого проекта (-ов) запускается после успешного завершения сборки проекта, чтобы обеспечить стабильность / стабильность зависимого (-ых) проекта (-ов).
пример
Предположим, что команда разрабатывает проект bus-core-api, от которого зависят два других проекта: app-web-ui и app-desktop-ui .
Проект app-web-ui использует 1.0-SNAPSHOT проекта 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-SNAPSHOT проекта 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> <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 —
<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, но для удовлетворения вышеуказанного требования нам нужно сделать что-то дополнительное.
Мы можем действовать следующими двумя способами:
-
Добавьте цель пост-сборки в bus-core-api pom для запуска сборок app-web-ui и app-desktop-ui .
-
Используйте сервер непрерывной интеграции (CI), такой как Hudson, для автоматического управления сборкой.
Добавьте цель пост-сборки в bus-core-api pom для запуска сборок app-web-ui и app-desktop-ui .
Используйте сервер непрерывной интеграции (CI), такой как Hudson, для автоматического управления сборкой.
Использование Maven
Обновите проект bus-core-api 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>
Давайте откроем командную консоль, перейдем в каталог C: \> MVN> bus-core-api и выполним следующую команду mvn .
>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] -------------------------------------------------------------------
Использование службы непрерывной интеграции с Maven
Использование CI Server более предпочтительно для разработчиков. Не требуется обновлять проект bus-core-api каждый раз, когда добавляется новый проект (например, app-mobile-ui), как зависимый проект от проекта bus-core-api . Hudsion — это инструмент непрерывной интеграции, написанный на Java, который находится в контейнере сервлетов, таких как Apache tomcat и сервер приложений Glassfish. Hudson автоматически управляет автоматизацией сборки с помощью управления зависимостями Maven. Следующий снимок определит роль инструмента Hudson.
Хадсон рассматривает каждый проект как работу. После того, как код проекта зарегистрирован в SVN (или в любом инструменте управления исходными кодами, сопоставленном с Hudson), Hudson начинает свою работу по сборке, и, как только эта работа завершается, он автоматически запускает другие зависимые задания (другие зависимые проекты).
В приведенном выше примере, когда исходный код bus-core-ui обновляется в SVN, Hudson начинает его сборку. После успешного завершения сборки Hudson автоматически ищет зависимые проекты и начинает создавать проекты app-web-ui и app-desktop-ui .