Библиотека Джексона после обфускации с использованием Proguard

#java #jackson #proguard

#java #джексон #proguard

Вопрос:

Через некоторое время, попробовав некоторые решения здесь, я все еще сталкиваюсь с проблемой получения исключения NullPointerException, по-видимому, при использовании библиотеки Джексона, после попытки сжать мой файл jar с помощью Proguard.

Это то, что я определил в своем файле конфигурации Proguard:

 -injars <my_raw_filejar>.jar
-outjars    <shrunk_filejar>.jar
-libraryjars    <JAVA_HOME>/lib/rt.jar

-keep public class packagename.MainClass{
    public static void main(java.lang.String[]);
}
-keepnames class org.codehaus.jackson.** { *; }
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keepattributes Signature
-dontobfuscate
-optimizations !code/allocation/variable
-dontoptimize
-dontwarn
-ignorewarnings
  

Но я получаю сообщение об ошибке ниже, как только я запускаю свой сгенерированный сжатый jar:

 Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:535)
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:452)
    at org.apache.beam.sdk.options.PipelineOptionsFactory.<clinit>(PipelineOptionsFactory.java:450)
    at skry.tech.terbium.pipelines.TerbiumFeedBigTablePipeline.main(TerbiumFeedBigTablePipeline.java:30)
Caused by: java.lang.NullPointerException
    at com.fasterxml.jackson.databind.cfg.MapperConfig.collectFeatureDefaults(MapperConfig.java:99)
    at com.fasterxml.jackson.databind.cfg.MapperConfigBase.<clinit>(MapperConfigBase.java:31)
    ... 4 more
  

Есть ли какие-либо подсказки о том, что происходит и как устранить эту ошибку?

Ответ №1:

У меня была такая же проблема здесь.

Поскольку проблема, по-видимому, была основана на том, что перечисление равно нулю. Я добавил следующий код в свой proguard.conf

 -keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}