我正在使用来自ant(版本5.0 beta 2)的proguard,当我尝试使用filter(!META-INF / MANIFEST-MF)添加输入jar(AKA injars)时,参数将转换为:
-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)"
我的build.xml类似于:
<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 ant任务是由于字符(
或!
而逃避文件路径,但它不应该因为实际上它们不是文件路径的一部分。 / p>
答案 0 :(得分:2)
在ProGuard样式配置中,在文件名后面的括号中指定过滤器:
-injars application.jar(!META-INF/MANIFEST.MF)
在Ant配置中,文件名和过滤器使用单独的attbute指定:
<injar path="application.jar" filter="!META-INF/MANIFEST.MF" />
因此,在这种情况下,不应将带括号的过滤器附加到文件名。