Maven 自动编译 Maven快照 Maven管理依赖关系 Build Automation定义了项目构建成功完成后依赖项目构建过程开始的场景,以确保依赖项目是稳定的。 例 考虑一个团队正在开发一个项目 bus-core-api ,其中两个其他项目 app-web-ui 和 app-desktop-ui 都依赖于该项目。 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 项目正在使用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 构建。 使用像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服务器。每次添加新项目(例如,app-mobile-ui)时,不需要更新 bus-core-api 项目作为 bus- core-api 项目的依赖项目。Hudsion是一个用java编写的持续集成工具,它在一个servlet容器中,例如Apache tomcat和glassfish应用服务器。Hudson使用Maven依赖管理自动管理构建自动化。以下快照将定义Hudson工具的角色。 哈德森认为每个项目都是工作。一旦项目代码签入SVN(或映射到Hudson的任何源代码管理工具),Hudson就开始构建作业,一旦完成此作业,它将自动启动其他相关作业(其他相关项目)。 在上面的例子中,当在SVN中更新 bus-core-ui 源代码时,Hudson开始构建。一旦构建成功,Hudson会自动查找依赖项目,并开始构建 app-web-ui 和 app-desktop-ui 项目。 Maven快照 Maven管理依赖关系