我一直在搞弄Proguard的配置,发现我想测试只是为了优化和模糊化而不会缩小而只是减少了我的jar。这是我的配置:
# Include java runtime classes
-libraryjars <java.home>/lib/rt.jar
-dontshrink
-dontusemixedcaseclassnames
-dontpreverify
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-dontwarn
-keep class **
-keep interface **
-keep enum **
但是我仍然会收到类似的错误:
java.lang.IllegalArgumentException:找不到[org / apache / logging / log4j / core / jackson / Log4jXmlModule](具有1个已知的超级类)和[org / apache / logging / log4j / core的公共超类/ jackson / Log4jJsonModule](具有4个已知的超级类)
我在做什么错?
答案 0 :(得分:1)
log4j库依赖于某些运行时依赖项,请参见此处的页面:
https://logging.apache.org/log4j/2.x/runtime-dependencies.html
有问题的类(Log4jXmlModule和Log4jJsonModule)从某些jackson类扩展而来,这只是一个可选的依赖项,因此可能不包含在您的项目中。
如果启用-dontshrink
,则ProGuard无法删除这些类,并且在优化过程中会出现类似的错误,因为ProGuard不了解层次结构。通常,不建议执行优化,而是禁用收缩,因为某些优化技术依赖于收缩后会清理的事实。
根据您的情况,您可以将缺少的运行时依赖项作为-libraryjar
输入添加到ProGuard,以避免发生此错误。