我想用 proguard 打包我的jar文件。其中一个依赖项命名为 jersey ,由第三方库引入。我确定这个 jersey 库可以在我打算部署我的jar的机器上使用,所以我决定将它从我的包中删除。
-injars
选项中删除了名称中包含 jersey 的任何广告-libraries
选项我认为proguard仍然需要它 在我运行proguard后,我收到了此错误
[错误]警告:库类 com.sun.jersey.spi.scanning.AnnotationScannerListener $ AnnotatedClassVisitor 扩展或实现程序类org.objectweb.asm.ClassVisitor
我将-dontwarn com.sun.jersey.**
添加到我的proguard配置中,并摆脱了该错误。然后我打开我的jar,我找不到任何类似于错误消息中的类的类。
我认为proguard只报告-injars
图书馆的问题,或者我错了?
如果我确实错了。抱怨-libraries
中的问题有什么意义?你不能以任何方式修复它。
答案 0 :(得分:0)
以下是文档说的内容:
-injars class_path
指定要处理的应用程序的输入jar(或aars,wars,ear,zips,apks或目录)。这些jar中的类文件将被处理并写入输出jar。 ...
-libraryjars class_path
指定要处理的应用程序的库jar(或aars,wars,ear,zips,apks或目录)。这些罐子中的文件不会包含在输出罐中。 指定的库jar应该至少包含由应用程序类文件扩展的类文件。 ...
我认为proguard只报告-injars库的问题,或者我错了?
这不完全正确。当然,这不是你所观察到的。该错误消息的含义是“扩展”规则适用于-libraryjars库中的类...至少在某些情况下。
(这是有意义的。假设A是一个应用程序类,L1和L2是库类。如果A扩展L1扩展L2,那么proguard需要L1和L2来分析A的类型层次。)
我认为在这种情况下正确的解决方法是将“asm”JAR添加到-libraryjars
列表中。运行时需要JAR运行JAR,并且您应该将所有这些JAR添加到-libraryjars
列表中。