Proguard - java.lang.IllegalArgumentException: 找不到常见的超级 class
Proguard - java.lang.IllegalArgumentException: Can't find common super class of
我刚刚将我项目中 Java 的版本从 8 切换到 11,现在我遇到了 Proguard 6.2.2 和 sbt-proguard 0.3.0 的问题,选项如下:
-dontnote,
-dontwarn,
-dontoptimize,
-dontusemixedcaseclassnames,
-keep public class org.slf4j.** { *; },
-keep public class ch.** { *; },
-keep class org.bouncycastle.** { *; },
-keepnames public class * {
public static ** classTag();
},
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
},
-keepclassmembers class * {
** MODULE$;
},
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
},
-keepclassmembers,allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
},
-keepattributes SourceFile,LineNumberTable
这是堆栈跟踪:
Unexpected error while performing partial evaluation:
Class = [akka/actor/ActorSelection$$anonfun]
Method = [applyOrElse(Ljava/lang/String;Lscala/Function1;)Ljava/lang/Object;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes))
Unexpected error while preverifying:
Class = [akka/actor/ActorSelection$$anonfun]
Method = [applyOrElse(Ljava/lang/String;Lscala/Function1;)Ljava/lang/Object;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes))
Error: Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes)
java.lang.RuntimeException: Proguard failed with exit code [1]
at scala.sys.package$.error(package.scala:30)
at com.lightbend.sbt.SbtProguard$.runProguard(SbtProguard.scala:114)
at com.lightbend.sbt.SbtProguard$.$anonfun$proguardTask(SbtProguard.scala:94)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:73)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:146)
at sbt.util.Difference.apply(Tracked.scala:323)
at sbt.util.Difference.apply(Tracked.scala:303)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:142)
at sbt.util.Difference.apply(Tracked.scala:323)
at sbt.util.Difference.apply(Tracked.scala:298)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:141)
at com.lightbend.sbt.SbtProguard$.$anonfun$proguardTask(SbtProguard.scala:98)
at scala.Function1.$anonfun$compose(Function1.scala:49)
at sbt.internal.util.$tilde$greater.$anonfun$$u2219(TypeFunctions.scala:62)
at sbt.std.Transform$$anon.work(Transform.scala:67)
at sbt.Execute.$anonfun$submit(Execute.scala:281)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
at sbt.Execute.work(Execute.scala:290)
at sbt.Execute.$anonfun$submit(Execute.scala:281)
at sbt.ConcurrentRestrictions$$anon.$anonfun$submitValid(ConcurrentRestrictions.scala:178)
at sbt.CompletionService$$anon.call(CompletionService.scala:37)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我尝试添加这些选项但没有成功:
-keep class akka.actor.** { *; },
-keep interface akka.actor.** { *; },
-keep enum akka.actor.** { *; },
-keep class akka.actor.SelectChildPattern { *; },
-keep class akka.actor.ActorSelection { *; },
-keep class akka.actor.SelectChildName { *; }
我可以看到 Akka 在库 jar 中:
[debug] -libraryjars "/Users/izhavoronkov/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.12/2.5.26/akka-actor_2.12-2.5.26.jar"
此外,如果我设置 -dontpreverify
,我可以在 jar 中找到丢失的 Akka 类,并且它们不会像预期的那样被混淆。不知道混淆器或配置有什么问题。
我在 Java 8.
中没有这些问题
问题通过添加-libraryjars $java_home_11/jmods/java.base.jmod
参数解决
我刚刚将我项目中 Java 的版本从 8 切换到 11,现在我遇到了 Proguard 6.2.2 和 sbt-proguard 0.3.0 的问题,选项如下:
-dontnote,
-dontwarn,
-dontoptimize,
-dontusemixedcaseclassnames,
-keep public class org.slf4j.** { *; },
-keep public class ch.** { *; },
-keep class org.bouncycastle.** { *; },
-keepnames public class * {
public static ** classTag();
},
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
},
-keepclassmembers class * {
** MODULE$;
},
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
},
-keepclassmembers,allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
},
-keepattributes SourceFile,LineNumberTable
这是堆栈跟踪:
Unexpected error while performing partial evaluation:
Class = [akka/actor/ActorSelection$$anonfun]
Method = [applyOrElse(Ljava/lang/String;Lscala/Function1;)Ljava/lang/Object;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes))
Unexpected error while preverifying:
Class = [akka/actor/ActorSelection$$anonfun]
Method = [applyOrElse(Ljava/lang/String;Lscala/Function1;)Ljava/lang/Object;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes))
Error: Can't find common super class of [akka/actor/SelectChildPattern] (with 1 known super classes) and [akka/actor/SelectChildName] (with 1 known super classes)
java.lang.RuntimeException: Proguard failed with exit code [1]
at scala.sys.package$.error(package.scala:30)
at com.lightbend.sbt.SbtProguard$.runProguard(SbtProguard.scala:114)
at com.lightbend.sbt.SbtProguard$.$anonfun$proguardTask(SbtProguard.scala:94)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:73)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:146)
at sbt.util.Difference.apply(Tracked.scala:323)
at sbt.util.Difference.apply(Tracked.scala:303)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:142)
at sbt.util.Difference.apply(Tracked.scala:323)
at sbt.util.Difference.apply(Tracked.scala:298)
at sbt.util.FileFunction$.$anonfun$cached(FileFunction.scala:141)
at com.lightbend.sbt.SbtProguard$.$anonfun$proguardTask(SbtProguard.scala:98)
at scala.Function1.$anonfun$compose(Function1.scala:49)
at sbt.internal.util.$tilde$greater.$anonfun$$u2219(TypeFunctions.scala:62)
at sbt.std.Transform$$anon.work(Transform.scala:67)
at sbt.Execute.$anonfun$submit(Execute.scala:281)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
at sbt.Execute.work(Execute.scala:290)
at sbt.Execute.$anonfun$submit(Execute.scala:281)
at sbt.ConcurrentRestrictions$$anon.$anonfun$submitValid(ConcurrentRestrictions.scala:178)
at sbt.CompletionService$$anon.call(CompletionService.scala:37)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我尝试添加这些选项但没有成功:
-keep class akka.actor.** { *; },
-keep interface akka.actor.** { *; },
-keep enum akka.actor.** { *; },
-keep class akka.actor.SelectChildPattern { *; },
-keep class akka.actor.ActorSelection { *; },
-keep class akka.actor.SelectChildName { *; }
我可以看到 Akka 在库 jar 中:
[debug] -libraryjars "/Users/izhavoronkov/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.12/2.5.26/akka-actor_2.12-2.5.26.jar"
此外,如果我设置 -dontpreverify
,我可以在 jar 中找到丢失的 Akka 类,并且它们不会像预期的那样被混淆。不知道混淆器或配置有什么问题。
我在 Java 8.
中没有这些问题问题通过添加-libraryjars $java_home_11/jmods/java.base.jmod
参数解决