'Refactoring'에 해당되는 글 1건

  1. build.xml refactoring using macrodef tag (1) 2010/03/15
The ThoughtWorks Anthology 라는 책의 11 챕터의 빌드 아케텍트인 줄리안 심슨님의 내용은, build.xml 즉, ant 파일이 refactoring에 대한 내용입니다.  그 중에서, <macrodef> 태그를 이용한 build.xml 파일의 리펙토링 예제가 나오는데, 유용할것 같아서 개인적으로 사용하고 있는 dist target에 대해서 리펙토링을 적용해 봤습니다.

기존
<!-- distribute compiled binary to dist folder -->
    <target name="dist" depends="compile" description="distribute library">
        <echo>dist target started</echo>
        <jar destfile="${dist.dir}/${project.name}-${project.version}.jar">
            <fileset dir="${build.main.classes}"></fileset>
           
            <manifest id="MANIFEST.MF">
                 <attribute name="Built-By" value="${user.name}"/>
                 <!--attribute name="Class-Path" value="${class-path}" /-->   
             </manifest>
        </jar>
       
        <copy todir="${dist.dir}">
            <fileset dir="${lib.dir}">
                <exclude name="junit*.jar" />
            </fileset>
        </copy>
       
        <!-- compress binary -->
        <zip destfile="${dist.dir}/${project.name}-${project.version}.zip" >
            <fileset dir="${dist.dir}" includes="**" />
        </zip>
        <echo>dist target completed</echo>
    </target>   

리펙토링된 후
    <macrodef name="dist_jar">
        <sequential>
            <jar destfile="${dist.dir}/${project.name}-${project.version}.jar">
                <fileset dir="${build.main.classes}"></fileset>
                <manifest id="MANIFEST.MF">
                    <attribute name="Built-By" value="${user.name}"/>
                    <!--attribute name="Class-Path" value="${class-path}" /-->   
                </manifest>
            </jar>
        </sequential>
    </macrodef>
   
    <macrodef name="dist_copy">
        <sequential>
            <copy todir="${dist.dir}">
                <fileset dir="${lib.dir}">
                    <exclude name="junit*.jar" />
                </fileset>
            </copy>
        </sequential>
    </macrodef>
   
    <macrodef name="dist_zip">
        <sequential>
            <!-- compress binary -->
            <zip destfile="${dist.dir}/${project.name}-${project.version}.zip" >
                <fileset dir="${dist.dir}" includes="**" />
            </zip>       
        </sequential>
    </macrodef>
   
    <!-- distribute compiled binary to dist folder -->
    <target name="dist" depends="compile" description="distribute library">
        <echo>dist target started</echo>
        <dist_jar />
        <dist_copy />
        <dist_zip />
        <echo>dist target completed</echo>
    </target>   

위 예제처럼, 리펙토링된 내용을 살펴보면, <macrodef>태그를 통해서 기능에 대한 내용을 작게 쪼개서 빼고(<macrodef>) , 사용하는 <target>에서는 필요한 각 기능을 호출하는 템플릿 메쏘드(?)처럼 기술하게 됩니다. 어디서 많이 본 느낌인데.. 위는 기능을 작게 나눠서 메쏘드로 뽑는 extract method 리렉토링 기법과 동일하네요.. 역시 대가들에게서 많은 내용을 배우게 되는것 같습니다. ^^


'Tools' 카테고리의 다른 글

java c/c++, c# 호출방식  (0) 2010/04/29
eclipse에서 java source 보기  (0) 2010/03/16
build.xml refactoring using macrodef tag  (1) 2010/03/15
staruml  (0) 2010/02/08
FindBugs 사용하기..  (0) 2010/02/02
Tag // ,