Proguard找到不存在的类

时间:2015-02-07 23:49:12

标签: java proguard

我想用 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中的问题有什么意义?你不能以任何方式修复它。

1 个答案:

答案 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列表中。