2016-09-30 117 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); 
}