简体   繁体   中英

Proguard - java.lang.IllegalArgumentException: Can't find common super class of

I just switched the version of Java in my project from 8 to 11 and now I have problems with Proguard 6.2.2 and sbt-proguard 0.3.0 with the following options:

-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

And here's the stacktrace:

Unexpected error while performing partial evaluation:
   Class       = [akka/actor/ActorSelection$$anonfun$1]
   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$1]
   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$2(SbtProguard.scala:94)
   at sbt.util.FileFunction$.$anonfun$cached$1(FileFunction.scala:73)
   at sbt.util.FileFunction$.$anonfun$cached$4(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$3(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$2(FileFunction.scala:141)
   at com.lightbend.sbt.SbtProguard$.$anonfun$proguardTask$1(SbtProguard.scala:98)
   at scala.Function1.$anonfun$compose$1(Function1.scala:49)
   at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
   at sbt.std.Transform$$anon$4.work(Transform.scala:67)
   at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
   at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
   at sbt.Execute.work(Execute.scala:290)
   at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
   at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
   at sbt.CompletionService$$anon$2.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)

I tried to add these options with no luck:

-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 { *; }

I can see that Akka is in library jars:

[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"

Also, if I set -dontpreverify , I can find the missing Akka classes inside the jar and they're not obfuscated as expected. Have no idea what's wrong with proguard or config.

And I don't have these problems with Java 8.

The problem is solved by adding the -libraryjars $java_home_11/jmods/java.base.jmod param

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM