自动化构建
举个例子:
项目A:app-web-ui
项目B:app-desktop-ui
俩个项目都依赖于新项目C:bus-core-api
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项目被使用。
故需要进行以下操作:
1.在bus-core-api项目的pom文件中添加一个post_build目标操作来启动app-web-ui和app-desktop-ui项目的构建
2.使用持续集成,Jenkins来管理构建自动化
打开命令行,进入到bus-core-api目录下;执行命令:
PS D:\yiq\Maven\bus-core-api>>mvn clean package -U
执行完成后,开始构建项目: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: D:\yiq\Maven\bus-core-api\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: D:\yiq\Maven\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: D:\yiq\Maven\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
使用持续集成(CI)-Jenkins
每次一个新项目,比如上面的app-web-ui,添加依赖项目bus-core-api时,开发者就不需要更新bus-core-api项目中的pom,Jenkins会借助maven的依赖管理功能实现自动化构建
当代码提交到Git/Svn后,Jenkins就会自动构建项目任务,一旦构建完成,就会自动查找依赖的项目,然后构建。
自动化部署:
部署的过程分为以下几部分:
1. 将项目代码提交到Svn/Git代码库并打上标签
2. 从Svn/Git上下载完整的源代码
3. 构建应用
4. 存储构建输出WAR或EAR文件到一个常用的网络上
5. 从网络上获取文件并且部署文件到生产站点上
6. 更新文档并且更新应用的版本号
问题:可能有多个团队多个人在操作,导致网络机器上的版本不是最新的,导致部署的版本不是最新的
那么, 此时就需要自动化部署。
1. 使用maven构建和发布项目
2. 使用subversion源码仓库管理源代码
3. 使用远程仓库管理软件来管理项目二进文件
最后,修改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>
<scm>
<url>http://www.svn.com</url>
<connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
Framework</connection>
<developerConnection>scm:svn:${username}/${password}@localhost:8080:
common_core_api:1101:code</developerConnection>
</scm>
<distributionManagement>
<repository>
<id>Core-API-Java-Release</id>
<name>Release repository</name>
<url>http://localhost:8081/nexus/content/repositories/
Core-Api-Release</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<scmCommentPrefix>[bus-core-api-release-checkin]-</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
说明:
SCM:配置SVN的路径,maven将从该路径下将代码取下来
repository:构建的 WAR 或 EAR 或JAR 文件的位置,或者其他源码构建成功后生成的构件的存储位置。
Plugin:配置maven-release-plugin插件来实现自动化部署过程
Maven Release插件:
maven使用 maven-release-plugin插件完成以下任务:
清理工作空间,保证最新的发布进程成功运行
mvn release:clean
在上次发布过程不成功的情况下,回滚
mvn release:rollback
执行很多操作:检查本地是否有未提交的,确保没有快照的依赖,更新POM文件,运行测试用例,提交修改后的POM,为代码在svn中标记,增加版本号……
mvn release:prepare
构建成功后,检查在仓库上传的jar文件是否生效
mvn release:perform