• CruiseControl利用Ant将Web项目打包成War


    CruiseControl本身不具有打包项目的功能,而且它的核心很小,但是CruiseControl的强大之处在于它的强大的扩展性,与Ant集成尤显如此。

    我们要将Web项目打包成WAR,必须要借助Ant来实现。

    1、首先我们来写一段Ant的脚本,为了与持续集成的配置文件build.xml区分开,在此我将Ant打包的功能单独放在一个配置文件中,此文件名为"publisher.xml"。

    pubilsher.xml的脚本很简单,关于脚本的介绍与功能在文件中已用注释的方式进行说明,具体请看源代码:

    <project name="RBAC" default="war" basedir=".">
    <property name="classes" value="build/classes"/>
    <property name="build" value="build"/>
    <property name="lib" value="WebContent/WEB-INF/lib/"/>

    <!--项目依赖的第三方jar包路径-->
    <path id="lib_classpath">
    <fileset dir="WebContent/WEB-INF/lib/">
    <include name="*.jar"/>
    </fileset>
    </path>

    <target name="clean" description="删除build目">
    <delete dir="build"/>
    </target>

    <target name="compile" depends="clean" description="建立${classes}路径,并编译class文件到${classes}路径下">
    <mkdir dir="${classes}"/>
    <!--执行编译-->
    <javac srcdir="src" destdir="${classes}">
    <classpath refid="lib_classpath"/> <!--引入项目依赖的第三方jar包-->
    </javac>
    </target>

    <target name="prepare" description="将Struts、Spring、Hibernate、properties等配置文件拷贝到${classes}路径下">
    <!--拷贝所有的xml配置文件-->
    <copy todir="${classes}">
    <fileset dir="src">
    <include name="**/*.xml"/>
    </fileset>
    </copy>
    <!--拷贝所有的属性文件-->
    <copy todir="${classes}">
    <fileset dir="src">
    <include name="**/*.properties"/>
    </fileset>
    </copy>
    </target>

    <target name="war" depends="compile,prepare" description="打包war">
    <war destfile="${build}/RBAC.war" webxml="WebContent/WEB-INF/web.xml">
    <!--拷贝WebContent下除了Web-INF和META-INF的两个文件夹-->
    <fileset dir="WebContent" includes="**/*.jsp"/>
    <!--拷贝lib目录下的jar包-->
    <lib dir="${lib}"/>
    <!--拷贝${classes}下的class文件-->
    <classes dir="${classes}"/>
    </war>
    </target>
    </project>

    这个脚本确实很简单吧!

    Note:依赖的Jar包很重要,如果你的项目引入了第三方的Jar包,如:annotations-api.jar,请一定要引入,否则将会编译失败。

    2、Ant脚本编写好了,那么如何让这个Ant脚本在适当的时候运行呢?

    我们的想法是:CC在build项目之后,如过成功,便将项目打包成War,那么我们就需要用CC来控制这段脚本的运行。

    稍微熟悉CC的人都知道,CC有一个很重要的element(元素)---<publishers>,Publishers是在build完成之后运行的,而无论CC的build是成功还是失败,它都会运行。如要让Ant脚本在CC的build执行成功后运行的话,我们可以找到一个子元素<onsuccess/>,它的意思是当build成功后,执行此代码段。那么我们就可以编写代码了:

    <publishers>
    <onsuccess>
    </onsuccess>
    </publishers>

    紧接着,我们在<onsuccess>中添加调用Ant脚本的代码,如下:

    <antpublisher anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/publisher.xml"/>

    完整的脚本如下:

    <publishers>
    <onsuccess>
    <antpublisher anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/publisher.xml"/>
    </onsuccess>
    </publishers>

    这样,我们的Ant脚本就能执行了,打开你的CC,等待第一成功build之后,你会发现你的project/项目/目录下多了一个build文件夹,文件夹类就是编译后的结果。

    Note:CC中的代码也可使用以下代码代替:

    <publishers>
    <antpublisher anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/publisher.xml" thisbuildsuccessful="true"/>
    </publishers>

    Notice:本人菜鸟,代码拙劣,请海涵。

  • 相关阅读:
    c#——总结两种方式下载模板
    c#——NPOL下载
    c#——泛型类型约束
    Oracle 数据类型
    软件测试绩效评估点
    读《没有带不好的员工》总结
    安装jenkins,配置pipline 运行docker
    K8S pv与pvc匹配不到的坑
    jenkins 在pipeline中运行docker镜像执行测试代码
    k8s 储存卷的定义与使用
  • 原文地址:https://www.cnblogs.com/oldjiang/p/CruiseControlAntWar.html
Copyright © 2020-2023  润新知