JAR的Class-Path写在JAR的Manifest文件中。以下Bash代码从JAR读取Class-Path,如果它没有超过72 char限制:
unzip -c "$1" META-INF/MANIFEST.MF |
sed -n 's/^Class-Path: \(.\+\)$/\1/p' |
tr -d '\r'
现在我在Ant中使用exec
调用代码,但我想删除所有exec
。
如何在不使用unzip
,sed
和tr
的情况下在Ant中执行相同操作?
答案 0 :(得分:2)
您可能需要尝试以下方法,将短类路径放在属性classpath
中:
<loadresource property="classpath">
<zipentry zipfile="demo.jar" name="META-INF/MANIFEST.MF"/>
<filterchain>
<tokenfilter>
<containsregex pattern="^Class-Path: (.+)$" flags="i"/>
<replaceregex pattern="^Class-Path: (.+)$" replace="\1" flags="i"/>
</tokenfilter>
<tokenfilter><!-- get rid of trailing line separator -->
<filetokenizer/>
<replaceregex pattern="(\r?\n)+" replace="" flags="m"/>
</tokenfilter>
</filterchain>
</loadresource>
编辑:如果你在上面的tokenfilter之前放置了以下内容,那么它也应该适用于更长的Class-Path值(首先加入分割线):
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="\r?\n (.+)$" replace="\1" flags="m"/>
</tokenfilter>