您的位置:首页 > 运维架构 > Tomcat

软件开发管理中的最佳实践——日构建和持续集成

2007-09-06 16:08 816 查看
<script type="text/javascript"><!--
google_ad_client = "pub-1926348199765453";
/* 728x90, 创建于 08-12-3 */
google_ad_slot = "0385006797";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

自动化构建的过程,在我项目里面试用了,非常不错

使用自动化持续集成可以做。…可以进行代码检查,单元测试,测试覆盖率,代码风格,代码重复性,优化建议,代码文档,代码方向工程UML,包直接的依赖性,构建流程。下面以我在项目中试用的一些经验,正如好记忆不如烂笔头,把这些记录起来是避免自己日后忘记的时候可以参考。
自动化部署所需要的工具:• 使用 UMLGraph 生成当前源代码的 UML 图。• 使用 SchemaSpy 创建实体关系图(ERD),归档数据库中的表格和关系。• 使用 Grand 生成构建目标以及它们之间的关系的 Ant 构建图。• 使用 Doxygen 生成源代码文档。• 使用 DocBook 制作用户文档。
Graphviz-2.20.2.exe(用于生成uml图形)Doxygen.exe(放入到windows/system32目录下)Doxytag.exe(放入到windows/system32目录下)所需jar包和其他需要的文件  另外2个重要的文件就是Build.propertites 这里是配置一些基本的信息,如#Where all those result will be 保存产生部署文件的位置test.report.base.dir=d:/test-report
#once you change the source.dir, don't forget to#update the doxygen.cfg accordingly, if you want#to generate doxygen docs 源文件位置source.dir=./src
#Location of test code 测试代码位置test.dir=./test
#Location of doxygen.cfg doxygen文件的配置文件doxygen.cfg=etc/doxygen.cfg
#lib location which should be included in CLASSPATH#这里要注意,要把Tomcat下相应的jar包也加上lib.dir=./liblib2.dir=./web/WEB-INF/libtomcat_lib = E:/YGProject/ClearCase/Server/Tomcat-5.0.28/server/libtomcat_lib2 = E:/YGProject/ClearCase/Server/Tomcat-5.0.28/common/lib
Build.xml(Ant的文件)要注意的问题,1. 要注意你项目的编码,如果你项目的编码是GBK的话,那么里面很多有encoding="UTF-8" docencoding="UTF-8" 就要改成gbk了。2.     <!--define classpath 定义路径,记得要把tomcat的路径加上 -->
    <path id="classpath">
        <fileset dir="${lib.dir}" id="lib">
            <include name="**/*.jar" />
        </fileset>
        <fileset dir="${lib2.dir}" id="lib2">
                <include name="**/*.jar" />
        </fileset>
        <fileset dir="${tomcat_lib}" id="tomcat_lib">
            <include name="**/*.jar" />
        </fileset>
        <fileset dir="${tomcat_lib2}" id="tomcat_lib2">
            <include name="**/*.jar" />
        </fileset>
        <pathelement path="${build.dir}" />
    </path>

将代码反向工程到 UML 中生成javadoc 文档,这里要说明的是<packageset dir="${source.dir}/dao" />,如果你的项目里面像我这样来安排程序结构:那么你就要把你所有src下的目录都加上, 如果你只是全部放到src下那么,只要一个<packageset dir="${source.dir} " />就可以了。
使用 Doxygen 生成源代码文档,结合使用 UMLGraph 和 Javadoc 在 Javadoc HTML 报告内部生成一些基本的 UML 类图。为了自定义展示在每一个类图中的信息
<!-- ================================= 
          target: javadoc              
         ================================= -->
    <patternset id="java.files.pattern" includes="**/*.java"/>
    
    <target name="javadoc" depends="init, mkdir" description="--> Begin Generate Javadoc Of The Project">
        <mkdir dir="${doc.output.dir}" />
        <delete dir="${javadoc.output.dir}" />
        <mkdir dir="${javadoc.output.dir}" />

        <javadoc destdir="${javadoc.output.dir}" encoding="UTF-8" docencoding="UTF-8" access="private">
            <classpath refid="classpath" />
            <packageset dir="${source.dir}/dao" />
            <packageset dir="${source.dir}/web" />   
            <packageset dir="${source.dir}/service" />
            <packageset dir="${source.dir}/commons" />
            
            <packageset dir="${test.dir}/dao" />
            <packageset dir="${test.dir}/web" />     
            <packageset dir="${test.dir}/service" />
            <packageset dir="${test.dir}/commons" />
            
            <doclet name="org.umlgraph.doclet.UmlGraphDoc" path="lib/build/UMLGraph.jar">
                <param name="-attributes" />
                <param name="-enumerations" />
                <param name="-enumconstants" />
                <param name="-operations" />
                <param name="-qualify" />
                <param name="-types" />
                <param name="-inferrel" />
                <param name="-inferdep" />
                <param name="-hide" value="java.*" />
                <param name="-collpackages" value="java.util.*" />
                <param name="-postfixpackage" />
                <param name="-nodefontsize" value="9" />
                <param name="-nodefontpackagesize" value="7" />
                <param name="-visibility" />
            </doclet>
        </javadoc>
    </target>
    <!-- ================================= 
          target: doxygen              
         ================================= -->
    <target name="doxygen" depends="init, mkdir" description="--> Doxygen Begin run">
        <mkdir dir="${doc.output.dir}" />
        <mkdir dir="${doxygen.output.dir}" />
        <mkdir dir="${doxygen.output.dir}/html" />
    
        <taskdef name="doxygen" classname="org.doxygen.tools.DoxygenTask" classpathref="classpath" />
        <doxygen configFilename="${doxygen.cfg}">
        </doxygen>
        <move todir="${doxygen.output.dir}">
            <fileset dir="doxygen" />
        </move>
        <move todir="${doxygen.output.dir}">
            <fileset dir="${doxygen.output.dir}/html">
                <include name="**/*.chm" />
            </fileset>
        </move>
    </target>
 这里就是生成的实际效果。
试用PMD来进行代码检查,对不符合代码规范的可以全部都检查出来,这样以后检查代码规范就可以轻松很多了。 <!-- ================================= 
          target: check.pmd  代码检查            
         ================================= -->
    <target name="check.pmd" depends="init, mkdir" description="--> check pmd">
        <delete dir="${pdm.output.dir}" />
        <mkdir dir="${pdm.output.dir}" />
        <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="classpath" />
        <pmd shortFilenames="true" targetjdk="1.6">
            <ruleset>basic,imports,unusedcode,naming,codesize,controversial,design</ruleset>
            <formatter type="text" toConsole="yes" />
            <formatter type="xml" toFile="${pdm.output.dir}/pmd-report.xml" linkPrefix="http://pmd.sourceforge.net/xref/" />
            <fileset refid="src" />
        </pmd>

        <!--Generate html file-->
        <xslt style="etc/pmd-report-per-class.xslt" in="${pdm.output.dir}/pmd-report.xml" out="${pdm.output.dir}/pmd-report.html">
        </xslt>

    </target>

<script type="text/javascript"><!--
google_ad_client = "pub-1926348199765453";
/* 336x280, 创建于 08-12-3 */
google_ad_slot = "6860128133";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息