用Ant打Jar包--在Manifest中引用Classpath(轉載)
在打jar包時,往往需要在manifest檔案中設定Class-Path,包含一些依賴的第三方jar包,使得以“java -jar xxx.jar”方式啟動的jar包能正確找到依賴的類。
網上大多演示使用打jar包的例子都是像這樣的:
<target name="jar" >
<jar destfile="${dest.jar}">
<fileset dir="${source.class}">
<include name="**/*.class"/>
</fileset>
<manifest>
<attribute name="Main-Class" value="${mianclass}"/>
<attribute name="Class-Path" value="xxxx.jar xxxx.jar xxxx.jar xxxx.jar"/>
</manifest>
</jar>
在依賴的jar包比較多的情況下,手工設定所有的jar包是非常令人崩潰而且容易出錯的事情。一旦引用的外部jar包有變動,還需要到這裡維護,時間一長,可能就會忘記。
<path id="classpath">
<fileset dir="${lib}" include="**/*.jar"/>
</path>
<target name="jar" depends="compile">
<pathconvert property="mf.classpath" pathsep=" ">
<path refid="classpath" />
<flattenmapper />
</pathconvert>
<jar destfile="${dest.jar}">
<fileset dir="${source.class}">
<include name="**/*.class"/>
</fileset>
<manifest>
<attribute name="Main-Class" value="${mainclass}"/>
<attribute name="Class-Path" value="${mf.classpath} "/>
</manifest>
</jar>
可以把classpath中的jar包,轉換成jar Class-Path格式,終於可以不用寫那一堆惱人的“xxxx.jar”了,Ant1.6.2及以上版本有效,還有一遍文章也介紹了這種方法:http://www.guydavis.ca/log/view.jsp?id=851