我使用proguard from ant(版本5.0 beta 2),当我尝试添加输入jar (AKA injars)与过滤器(!META-INF/MANIFEST-MF)参数转换为:
-injars '/path-to-my-file/myjar.jar(!META-INF/MANIFEST-MF)'
代替
-injars /path-to-my-file/myjar.jar(!META-INF/MANIFEST-MF)
所以过滤器(!META-INF/MANIFEST-MF)
被忽略,并抛出一个错误,试图读取文件"/path-to-my-file/myjar.jar(!META-INF/MANIFEST-MF)"
<pathconvert property="other_injars" refid="injars">
<mapper>
<globmapper from="*.jar" to="*.jar(!META-INF/MANIFEST.MF)" casesensitive="no"/>
</mapper>
</pathconvert>
<!-- obfuscate and optimize by ProGuard -->
<taskdef resource="proguard/ant/task.properties" classpath="${proguard.home}/lib/proguard.jar" />
<proguard configuration="${proguard.config.file}" >
<injar refid="main_injar"/>
<injar path="${other_injars}"/>
<outjar path="${workdir}/${output.jar.file}"/>
<libraryjar refid="third_parties" />
</proguard>
我的问题是,当我使用过滤器时,如何避免生成的injar
参数值中的'
字符?
我认为保护任务正在转义文件路径由于字符:(
或!
,但它不应该,因为实际上,它们不是文件路径的一部分。
在proguard风格的配置中,过滤器是在文件名之后的括号之间指定的:
-injars application.jar(!META-INF/MANIFEST.MF)
在Ant配置中,文件名和过滤器使用单独的属性指定:
<injar path="application.jar" filter="!META-INF/MANIFEST.MF" />
因此,在这种情况下,您不应该在文件名后面添加带括号的过滤器