2016-09-30 116 views
0

經過一段時間嘗試一些解決方案之後,我仍然面臨着使用Proguard收縮我的jar文件後,出現NullPointerException的問題,顯然是在使用Jackson庫時。使用Proguard的Jackson庫混淆後

這是我定義爲我的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 

有什麼發生了什麼以及如何解決這個錯誤的線索?

回答

0

我在這裏有同樣的問題。

由於該問題似乎基於枚舉爲空。我將下面的代碼添加到我的proguard.conf中

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