首页 > 解决方案 > ProGuard 的 InvalidDefinitionException

问题描述

我正在使用 ProGuard 混淆使用 Spark(spark-sql_2.12,版本 3.0.0-preview2)并在本地运行的桌面应用程序。我有一个注定要使用 Spark 读取 CSV 文件的类,它正在调用另一个函数来创建 SparkSession。我拥有的 com.fasterxml.jackson.core 依赖项是 jackson-databind 和 jackson-core 都是 2.10.3 版本。

运行 ProGuard 时,我收到此错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法使用 ProGuardG 构造 `org.apache.spark.rdd.RDDOperationScope 的实例

在此处输入图像描述

我已经删除了混淆和预验证,并尝试了一些事情并最终得到了我的 ProGuard 配置文件,如下所示:

@proguard_jmods.cfg

 

-dontshrink
-dontoptimize
-dontpreverify
-verbose

 

#-dontobfuscate
-keep class com.dependency.** { *; }
-repackageclasses ''
-renamesourcefileattribute SourceFile
-keepattributes *Annotation*,Signature,Annotation,InnerClasses,EnclosingMethod,SourceFile,LineNumberTable
-adaptresourcefilenames
-dontnote
-dontwarn java.util.**, com.ctc.wstx.**,com.github.**,com.jolbox.bonecp.**,com.mchange.v2.**,com.sun.istack.**,com.sun.tools.**,com.healthmarketscience.**,com.healthmarketscience.**,org.codehaus.**,org.iq80.snappy.**,com.sun.xml.**,com.thoughtworks.xstream.**,de.l3s.boilerpipe.**,javax.activation.**,javax.transaction.**,net.sf.ehcache.**,opennlp.tools.util.**,org.apache.cxf.**,org.apache.log4j.**,org.apache.poi.**,org.apache.sis.**,org.apache.**,org.dom4j.**,org.codehaus.plexus.**,javax.enterprise.**,org.glassfish.**,org.jdesktop.**,org.quartz.**,com.sun.org.**,javax.imageio.metadata.**,javax.xml.**,javax.jws.**,org.w3c.dom.**,org.xml.sax.**,au.com.bytecode.**,com.fasterxml.jackson.**,com.google.common.**,com.google.gson.**,com.googlecode.mp4parser.**,com.itextpdf.**,com.mchange.v1.**,com.microsoft.schemas.**,com.strobel.assembler.**,com.strobel.compilerservices.**,examples.RCallerScriptEngineExample1.**,examples.RCallerScriptEngineExample2.**,examples.RCallerScriptEngineExample2.**,examples.RCallerScriptEngineExample3.**,javassist.util.HotSwapAgent.**,javassist.util.HotSwapper.**,javax.rmi.CORBA.**,javax.rmi.CORBA.**,javax.rmi.PortableRemoteObject.**,org.bouncycastle.**,org.cyberneko.**,org.eclipse.jetty.**,org.etsi.uri.**,org.jboss.com.**,org.jdom2.**,org.jfree.**,org.joda.time.**,org.terracotta.quartz.**,ucar.nc2.grib.**,javax.imageio.metadata.**,com.jmatio.io.**,javax.script.**,com.sun.**,java.rmi.**,opennlp.tools.sentiment.**,java.lang.**,java.util.**,sun.misc.Unsafe.**,sun.**,org.w3.**,net.sf.ehcache.distribution.**,org.apache.http.**,org.apache.any23.**,com.graphbuilder.curve.**,com.strobel.decompiler.**,com.uwyn.jhighlight.**,rg.codehaus.stax2.**,org.openxmlformats.schemas.**,org.springframework.**,org.slf4j.**,com.mysql.**,org.pushingpixels.**,org.hibernate.**,org.jboss.**,net.bytebuddy.**,javax.persistence.**,org.eclipse.**,java.awt.datatransfer.**,java.sql.**,org.objectweb.**
,org.apache.any23.**,org.sparkproject.jetty.**, org.xerial.snappy.**,shaded.parquet.org.**,shadeio.commons.compress.**,shadeio.poi.ddf.**,shadeio.poi.openxml4j.**,
shadeio.poi.poifs.**,shadeio.poi.sl.**,shadeio.poi.ss**,shadeio.poi.xslf.**,shapeless.CaseClassMacros.**
-ignorewarnings
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**

 

 


-keep class com.fasterxml.jackson.** { *; } 

 

-dontwarn com.fasterxml.jackson.databind.**

 

-dontwarn com.fasterxml.jackson.** 
-keep class com.fasterxml.jackson.databind.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepclassmembers class ** extends com.fasterxml.jackson.databind.ser.std.** {
   public <init>(...);
}

 

-keepclassmembers class ** extends com.fasterxml.jackson.databind.deser.std.** {
   public <init>(...);
}

 

-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
    public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.** {
    public void set*(***);
    public *** get*();
}
-keep class org.json.JSONObject.** {** put(java.lang.String,java.util.Map);}

 

-keepattributes SourceFile,LineNumberTable,*Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses

 

-keep class org.codehaus.** { *; }
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
    public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.** {
    *;
}
-printseeds seed
-dontwarn !com.x.xx.xxx.**,**
#-keep class !com.x.** { *; }
-keep class !com.x.xx.xxx.**,** { *; }
-keep class com.google.guava.** { *; }
-keep class org.apache.spark.** { *; }
-keep class com.crealytics.** { *; }

 

# Keep - Applications. Keep all application classes, along with their 'main' methods.
-keepclasseswithmembers public class * {
    public static void main(java.lang.String[]);
}

 

 -keep class com.x.xxxxx.** {
    <fields>;
    <methods>;
}
-keeppackagenames com.x.xx.xxx.config
-keepdirectories  com/x/xx/config
-keepdirectories org/apache/spark/ui/static
-keepdirectories org/apache/spark/sql/execution/ui/static
-keepdirectories  src/main/resources

 

-keep interface *
-keepnames class ** implements com.x.xx.xxx.utils.ISerialisable
-keepclassmembers class ** implements com.x.xx.xxx.utils.ISerialisable {
  <fields>;
 }

 

-keep class com.x.xx.xxx.exceptions.** {
    <fields>;
}
-keep class org.apache.spark.rdd.** {
    <fields>;
     <methods>;
}
-keep class com.crealytics.spark.excel.** {
    <fields>;
     <methods>;
}

 

-keep class org.apache.spark.rdd.RDDOperationScope.** {
    <fields>;
     <methods>;
}

 

-keep class com.x.xx.xxx.files.** {
    <fields>;
     <methods>;
}

 

-keep class org.apache.spark.** {
    <fields>;
     <methods>;
}
-keep class org.apache.spark.sql.** {
    <fields>;
     <methods>;
}
-keep class org.apache.spark.sql.SparkSession.** {
    <fields>;
     <methods>;
}

 


-keep class org.apache.spark.SparkSession.** {
    <fields>;
     <methods>;
}
-keep class org.apache.spark.SparkSession$Builder.** {
    <fields>;
     <methods>;
}
 -keep class  com.x.xx.xxx.config.** {
    <fields>;
    <methods>;
}
-keep class com.x.xx.xxx.** {
    <fields>;
     <methods>;
}
-keep class com.x.xx.xxx.utils.** {
   <fields>;
     <methods>;
}
-keep class com.x.xx.xxx.xxxx.core.utils.** {
   <fields>;
     <methods>;
}

 

 


-keep class ** extends com.x.xx.xxx.utils.ISerialisable

 

# Keep - Applications. Keep all application classes, along with their 'main' methods.
-keepclasseswithmembers public class * {
    public static void main(java.lang.String[]);
}

 

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

 

# Also keep - Database drivers. Keep all implementations of java.sql.Driver.
-keep class * extends java.sql.Driver

 

# Also keep - Swing UI L&F. Keep all extensions of javax.swing.plaf.ComponentUI,
# along with the special 'createUI' method.
-keep class * extends javax.swing.plaf.ComponentUI {
    public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent);
}

有什么想法可以解决这个问题吗?谢谢!

标签: javaapache-sparkjacksonproguardobfuscation

解决方案


推荐阅读