在想移blog後,是不是要依抽象類別來分,如Maven、Ant甚至Git放到CM,Regex也包括Shell Script。臨時支援他人寫的程式,跳過Ant直接接觸Maven的我,注記一下Ant在manifest.mf生成dependency jar list的方法。

原來的Ant Script摘錄如下:

<target name="build" depends="compile" description="Compile and generate jar">
    <jar destfile="${dist.dir}/compare.jar" compress="true" basedir="${temp.dir}">
    <manifest>
        <attribute name="Main-Class" value="${mainclass}"/>
        <attribute name="Class-Path" value="lib\commons-collections.jar lib\commons-pool.jar lib\commons-dbcp.jar lib\ojdbc14.jar lib\nls_charset12.jar lib\jdom.jar lib\log4j-1.2.12.jar"/>
    </manifest>
    </jar>
    <copy todir="${dist.dir}" preservelastmodified="true">
        <fileset dir="${source.dir}" includes="config.xml,run.bat" />
    </copy>
    <copy todir="${dist.dir}/lib" preservelastmodified="true">
        <fileset dir="${lib.dir}" includes="*.jar" />
    </copy>
</target>

  如上述片段紅字,設定manifest.mf時,Class-Path後跟著是hard code。再擴充的話,就什麼都要加。若要改成自動讀lib目錄裡所有jar,如下:

<attribute name="Class-Path" value="${libs.project}" />

  那libs.project的property該如何設置,得在build.xml裡增加以下內容:

<pathconvert property="libs.project" pathsep=" ">
    <mapper>
        <chainedmapper>
            <!-- remove absolute path –>
            <flattenmapper />
            <!-- add lib/ prefix –>
            <globmapper from="*" to="lib/*" />
        </chainedmapper>
    </mapper>
    <path>
        <!-- lib.dir contains all jar files, in several subdirectories –>
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>
</pathconvert>

  看來設定似乎更累贅,但從英文注釋可以推敲是做什麼目的,設定一次就不擔心hard code拖累。Maven在export jar的manifest.mf也是如出一轍的複雜。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()