Maven-build-automation
Maven-ビルドオートメーション
ビルドオートメーションは、プロジェクトのビルドが正常に完了した後に依存プロジェクトのビルドプロセスが開始されるシナリオを定義し、依存プロジェクトの安定性を確保します。
例
チームがプロジェクト bus-core-api を開発しており、そのプロジェクトで app-web-ui と app-desktop-ui が依存している2つのプロジェクトがあるとします。
*app-web-ui* プロジェクトは、 *bus-core-api* プロジェクトの1.0-SNAPSHOTを使用しています。
<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* プロジェクトは、 *bus-core-api* プロジェクトの1.0-SNAPSHOTを使用しています。
<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 プロジェクトを使用する必要がありますが、上記の要件を満たすためには、さらに何かをする必要があります。
私たちは次の2つの方法で進めることができます-
- bus-core-api pomでビルド後の目標をキックオフ app-web-ui および app-desktop-ui ビルドに追加します。
- Hudsonなどの継続的統合(CI)サーバーを使用して、ビルドの自動化を自動的に管理します。
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サーバーを使用することは、開発者にとってより望ましいです。 bus-core-api プロジェクトの依存プロジェクトとして、新しいプロジェクト(app-mobile-uiなど)が追加されるたびに、 bus-core-api プロジェクトを更新する必要はありません。 Hudsionは、Apache tomcatやglassfishアプリケーションサーバーなどのサーブレットコンテナ内のJavaで記述された継続的統合ツールです。 Hudsonは、Maven依存関係管理を使用してビルドの自動化を自動的に管理します。 次のスナップショットは、Hudsonツールの役割を定義します。
ハドソンは、各プロジェクトのビルドを仕事と見なします。 プロジェクトコードがSVN(またはHudsonにマップされたソース管理ツール)にチェックインされると、Hudsonはビルドジョブを開始し、このジョブが完了すると、他の依存ジョブ(他の依存プロジェクト)を自動的に開始します。
上記の例では、 bus-core-ui ソースコードがSVNで更新されると、Hudsonがビルドを開始します。 ビルドが成功すると、Hudsonは依存プロジェクトを自動的に検索し、 app-web-ui および app-desktop-ui プロジェクトのビルドを開始します。