(转)用Ant打jar包--在manifest中引用classpath
作者:ShrimpN时间:2010-08-19
来自:http://popopa.com/entry/id/c24538022776a51301277796505d0018.html
在打jar包时,往往需要在manifest文件中设置Class-Path,包含一些依赖的第三方jar包,使得以“java-jarxxx.jar”方式启动的jar包能正确找到依赖的类。
网上大多演示使用打jar包的例子都是像这样的:
<targetname="jar">
<jardestfile="${dest.jar}">
<filesetdir="${source.class}">
<includename="**/*.class"/>
</fileset>
<manifest>
<attributename="Main-Class"value="${mianclass}"/>
<attributename="Class-Path"value="xxxx.jarxxxx.jarxxxx.jarxxxx.jar"/>
</manifest>
</jar>
在依赖的jar包比较多的情况下,手工设置所有的jar包是非常令人崩溃而且容易出错的事情。一旦引用的外部jar包有变动,还需要到这里维护,时间一长,可能就会忘记。
经过一番查找,发现了一种配置:
<pathid="classpath">
<filesetdir="${lib}"include="**/*.jar"/>
</path>
<targetname="jar"depends="compile">
<pathconvertproperty="mf.classpath"pathsep="">
<pathrefid="classpath"/>
<flattenmapper/>
</pathconvert>
<jardestfile="${dest.jar}">
<filesetdir="${source.class}">
<includename="**/*.class"/>
</fileset>
<manifest>
<attributename="Main-Class"value="${mainclass}"/>
<attributename="Class-Path"value="${mf.classpath}"/>
</manifest>
</jar>
可以把classpath中的jar包,转换成jarClass-Path格式,终于可以不用写那一堆恼人的“xxxx.jar”了,Ant1.6.2及以上版本有效,还有一遍文章也介绍了这种方法:http://www.guydavis.ca/log/view.jsp?id=851