Maven 自动化构建
自动化构建定义了这样一种场景: 在一个我的项目胜利构建实现后,其相干的依赖工程即开始构建,这样能够保障其依赖我的项目的稳固。
比方一个团队正在开发一个我的项目 bus-core-api,并且有其余两个我的项目 app-web-ui 和 app-desktop-ui 依赖于这个我的项目。
app-web-ui 我的项目应用的是 bus-core-api 我的项目的 1.0 快照:
<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 快照:
<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 我的项目被应用,但要达到下面的要求,咱们还须要做一些额定的工作。
能够应用两种形式:
在 bus-core-api 我的项目的 pom 文件中增加一个 post-build 指标操作来启动 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 目录下,而后执行以下命令。
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 我的项目时,开发者就不须要更新 bus-core-api 我的项目的 pom。Hudson 将会借助 Maven 的依赖治理性能实现工程的自动化创立。
Hudson 把每个我的项目构建当成一次工作。在一个我的项目的代码提交到 SVN(或者任何映射到 Hudson 的代码管理工具)后,Hudson 将开始我的项目的构建工作,并且一旦此构建工作实现,Hudson 将主动启动其余依赖的构建工作(其余依赖我的项目的构建)。
在下面的例子中,当 bus-core-ui 源代码在 SVN 更新后,Hudson 开始我的项目构建。一旦构建胜利,Hudson 主动地查找依赖的我的项目,而后开始构建 app-web-ui 和 app-desktop-ui 我的项目。