Maven-自动化构建和部署

自动化构建

举个例子:
项目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
上一篇:全局事件总线


下一篇:mlx90614红外传感器