在想移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也是如出一轍的複雜。