JAR 的类路径写入 JAR 的 Manifest 文件中。以下 Bash 代码从 JAR 中读取类路径(如果它不超过 72 个字符的限制):
unzip -c "$1" META-INF/MANIFEST.MF |
sed -n 's/^Class-Path: \(.\+\)$/\1/p' |
tr -d '\r'
现在我正在 Ant 中使用 exec
调用代码,但我想删除所有 exec
。
如何在不使用 unzip
、sed
和 tr
的情况下在 Ant 中执行相同操作?
最佳答案
您可能需要尝试添加以下内容(在定义属性的 build.xml 文件的开头),将短类路径放入属性 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>
<filetokenizer/>
<replaceregex pattern="\r?\n (.+)$" replace="\1" flags="m"/>
</tokenfilter>
关于ant - 如何从 Ant 中的 JAR 中读取类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422275/