Proguard 发现 类 不存在

Proguard find classes which does not exist

我想使用 proguard 来打包我的 jar 文件。其中一个依赖项名为 jersey,它由第 3 方库引入。我确定这个 jersey 库在我打算部署我的 jar 的机器上可用,所以我决定将它从我的包中删除。

在我运行proguard之后,我得到了这个错误

[error] Warning: library class com.sun.jersey.spi.scanning.AnnotationScannerListener$AnnotatedClassVisitor extends or implements program class org.objectweb.asm.ClassVisitor

我将 -dontwarn com.sun.jersey.** 添加到我的混淆器配置中,并消除了该错误。然后我打开我的罐子,我找不到任何名称与错误消息中的名称相似的 class。

我认为混淆器只会报告来自 -injars 库的问题,或者我错了?

如果我确实错了。在 -libraries 中抱怨问题有什么意义?你无法以任何方式修复它。

文档是这样说的:

-injars class_path

Specifies the input jars (or aars, wars, ears, zips, apks, or directories) of the application to be processed. The class files in these jars will be processed and written to the output jars. ...

-libraryjars class_path

Specifies the library jars (or aars, wars, ears, zips, apks, or directories) of the application to be processed. The files in these jars will not be included in the output jars. The specified library jars should at least contain the class files that are extended by application class files. ...


I think proguard will only report issue from the -injars libraries, or I am wrong?

这并不完全正确。当然,这不是您所观察到的。该错误消息的含义是“扩展”规则适用于 -libraryjars 库中的 classes ...至少在某些情况下。

(这是有道理的。假设 A 是一个应用程序 class,L1 和 L2 是库 classes。如果 A extends L1 extends L2,那么 proguard 需要 L1 和 L2 来分析 A 的类型层次结构。)

我认为在这种情况下正确的解决方法是将“asm”JAR 添加到 -libraryjars 列表中。球衣在运行时将需要 JAR,您应该将所有此类 JAR 添加到 -libraryjars 列表中。