自动化构建定义了这样一种场景: 在一个项目成功构建完成后其相关的依赖工程即开始构建这样可以保证其依赖项目的稳定。比如一个团队正在开发一个项目 bus-core-api 并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。app-web-ui 项目使用的是 bus-core-api 项目的 1.0 快照project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdapp-web-ui/groupId artifactIdapp-web-ui/artifactId version1.0/version packagingjar/packaging dependencies dependency groupIdbus-core-api/groupId artifactIdbus-core-api/artifactId version1.0-SNAPSHOT/version /dependency /dependencies /projectapp-desktop-ui 项目使用的是 bus-core-api 项目的 1.0 快照project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdapp-desktop-ui/groupId artifactIdapp-desktop-ui/artifactId version1.0/version packagingjar/packaging dependencies dependency groupIdbus-core-api/groupId artifactIdbus-core-api/artifactId version1.0-SNAPSHOT/version /dependency /dependencies /projectbus-core-api 项目project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdbus-core-api/groupId artifactIdbus-core-api/artifactId version1.0-SNAPSHOT/version packagingjar/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 xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdbus-core-api/groupId artifactIdbus-core-api/artifactId version1.0-SNAPSHOT/version packagingjar/packaging build plugins plugin artifactIdmaven-invoker-plugin/artifactId version1.6/version configuration debugtrue/debug pomIncludes pomIncludeapp-web-ui/pom.xml/pomInclude pomIncludeapp-desktop-ui/pom.xml/pomInclude /pomIncludes /configuration executions execution idbuild/id goals goalrun/goal /goals /execution /executions /plugin /plugins /build /project打开命令控制台切换到 C:\ MVN bus-core-api 目录下然后执行以下命令。C:\MVN\bus-core-apimvn 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 项目。