java - 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);
}
有什么想法可以解决这个问题吗?谢谢!
解决方案
推荐阅读
- firebase - 在 Google Firestore 中处理查询游标的正确方法?(Vue/Nuxt.js)
- python - 如何在超类中引用子类?
- php - 即使我返回响应,Symfony 也会抛出“没有返回响应”错误
- scope - Tcl/Tk: scope of variables for a function within a function
- firebase - 来自 Flutter 中 firebase_auth 插件的更多用户数据
- c++ - C++ - 无法从队列中删除元素
- php - PHP:根据与键值相关的术语对多维数组进行排序
- javascript - 如何使用 Node-ews 集成 Exchange 2010 版本的投票选项?
- c++ - std::cin 问题?这里发生了什么??std in vs 硬编码值
- php - 如何阻止名为 filename.php.jpg 的文件上传