proguard模糊处理后akka中的NoClassDefFoundError

proguard模糊处理后akka中的NoClassDefFoundError,akka,proguard,noclassdeffounderror,Akka,Proguard,Noclassdeffounderror,我有一个桌面(JavaFX)scala应用程序,它使用akkaactors库。没有运行时错误,直到我运行应用程序jar,并用proguard进行模糊处理。我处理了许多ClassNotFoundException,根据需要向proguard.txt添加了keep选项。但是现在我已经在一个NoClassDefFoundError上被困了好几个小时,有以下(消除模糊)堆栈跟踪: java.lang.NoClassDefFoundError: Could not initialize class akk

我有一个桌面(JavaFX)scala应用程序,它使用akkaactors库。没有运行时错误,直到我运行应用程序jar,并用proguard进行模糊处理。我处理了许多ClassNotFoundException,根据需要向proguard.txt添加了keep选项。但是现在我已经在一个NoClassDefFoundError上被困了好几个小时,有以下(消除模糊)堆栈跟踪

java.lang.NoClassDefFoundError: Could not initialize class akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool
        at akka.dispatch.ForkJoinExecutorConfigurator$ForkJoinExecutorServiceFactory.createExecutorService(ForkJoinExecutorConfigurator.java:432)
        at akka.dispatch.Dispatcher$LazyExecutorServiceDelegate.executor$lzycompute(Dispatcher.java:40)
        at akka.dispatch.Dispatcher$LazyExecutorServiceDelegate.executor(Dispatcher.java:40)
        at akka.dispatch.ExecutorServiceDelegate$class.execute(ExecutorServiceDelegate.java:209)
        at akka.dispatch.Dispatcher$LazyExecutorServiceDelegate.execute(Dispatcher.java:39)
        at akka.dispatch.Dispatcher.registerForExecution(Dispatcher.java:115)
        at akka.dispatch.MessageDispatcher.attach(MessageDispatcher.java:131)
        at akka.actor.dungeon.Dispatch$class.start(Dispatch.java:99)
        at akka.actor.ActorCell.start(ActorCell.java:374)
        at akka.actor.ActorCell.start(ActorCell.java:374)
        at akka.actor.LocalActorRef.start(LocalActorRef.java:341)
        at akka.actor.LocalActorRefProvider.guardian$lzycompute(LocalActorRefProvider.java:632)
        at akka.actor.LocalActorRefProvider.guardian(LocalActorRefProvider.java:626)
        at akka.actor.ActorSystemImpl.guardian(ActorSystemImpl.java:657)
        at akka.actor.ActorSystemImpl.terminate(ActorSystemImpl.java:690)
        at akka.actor.ActorSystemImpl.liftedTree2$1(ActorSystemImpl.java:675)
        at akka.actor.ActorSystemImpl._start$lzycompute(ActorSystemImpl.java:663)
        at akka.actor.ActorSystemImpl._start(ActorSystemImpl.java:663)
        at akka.actor.ActorSystemImpl.start(ActorSystemImpl.java:679)
        at akka.actor.ActorSystem$.apply(ActorSystem.java:141)
        at akka.actor.ActorSystem$.apply(ActorSystem.java:108)
        at com.percebemusic.pianoapp.core.package$.<init>(package.java:14)
        at com.percebemusic.pianoapp.core.package$.<clinit>(package.java)
        at com.percebemusic.pianoapp.desktop.ui.Main.registerServices(Main.java:187)
        at com.percebemusic.pianoapp.desktop.ui.Main.start(Main.java:97)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(AccessController.java)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(WinApplication.java)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
        at java.lang.Thread.run(Thread.java:745)
下一个调用(Java):

myproguard.txt的akka部分插入了几个人的解决方案,它是:

#### Akka (from proguard sample for akka)
-keepclassmembernames class * implements akka.actor.Actor {
  akka.actor.ActorContext context;
  akka.actor.ActorRef self;
}
-keep class * implements akka.actor.ActorRefProvider {
  public <init>(...);
}
-keep class * implements akka.actor.ExtensionId {
  public <init>(...);
}
-keep class * implements akka.actor.ExtensionIdProvider {
  public <init>(...);
}
-keep class akka.actor.SerializedActorRef {
  *;
}
-keep class * implements akka.actor.SupervisorStrategyConfigurator {
  public <init>(...);
}
-keep class * extends akka.dispatch.ExecutorServiceConfigurator {
  public <init>(...);
}
-keep class * implements akka.dispatch.MailboxType {
  public <init>(...);
}
-keep class * extends akka.dispatch.MessageDispatcherConfigurator {
  public <init>(...);
}
-keep class akka.event.Logging*
-keep class akka.event.Logging$LogExt {
  public <init>(...);
}
-keep class akka.remote.DaemonMsgCreate {
  *;
}
-keep class * extends akka.remote.RemoteTransport {
  public <init>(...);
}
-keep class * implements akka.routing.RouterConfig {
  public <init>(...);
}
-keep class * implements akka.serialization.Serializer {
  public <init>(...);
}
-dontwarn akka.remote.netty.NettySSLSupport**
-dontnote akka.**

# (I added)
-keep class akka.event.slf4j.** { *; }
-keep class akka.actor.LightArrayRevolverScheduler { *; }
-keep class akka.**
-keep class akka.** { *; }
# Inner classes like akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool
#-keep class akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool { *; }
#-keepclassmembers class akka.** { *; }
#-keep class akka.**.*$*
#-keep class akka.**$*
-keep class com.percebemusic.pianoapp.core.package$ { *; }
-keep scala.concurrent.forkjoin.ForkJoinPool$ForkJoinWorkerThreadFactory { *; }

# below required to keep generic type parameters, on which akka reflects
-keepattributes Signature

# and from https://spin.atomicobject.com/2013/06/20/akka-scala-on-android/ (didn't help)
-keep class com.typesafe.**
-keep class akka.**
-keep class scala.collection.immutable.StringLike {
    *;
}
-keepclasseswithmembers class * {
    public <init>(java.lang.String, akka.actor.ActorSystem$Settings, akka.event.EventStream, akka.actor.Scheduler, akka.actor.DynamicAccess);
}
-keepclasseswithmembers class * {
    public <init>(akka.actor.ExtendedActorSystem);
}
-keep class scala.collection.SeqLike {
    public protected *;
}

# and from http://macroid.github.io/modules/Akka.html (didn't help)
-keep class akka.actor.LightArrayRevolverScheduler { *; }
-keep class akka.actor.LocalActorRefProvider { *; }
-keep class akka.actor.CreatorFunctionConsumer { *; }
-keep class akka.actor.TypedCreatorFunctionConsumer { *; }
-keep class akka.dispatch.BoundedDequeBasedMessageQueueSemantics { *; }
-keep class akka.dispatch.UnboundedMessageQueueSemantics { *; }
-keep class akka.dispatch.UnboundedDequeBasedMessageQueueSemantics { *; }
-keep class akka.dispatch.DequeBasedMessageQueueSemantics { *; }
-keep class akka.actor.LocalActorRefProvider$Guardian { *; }
-keep class akka.actor.LocalActorRefProvider$SystemGuardian { *; }
-keep class akka.dispatch.UnboundedMailbox { *; }
-keep class akka.actor.DefaultSupervisorStrategy { *; }
-keep class macroid.akka.AkkaAndroidLogger { *; }
-keep class akka.event.Logging$LogExt { *; }

# and from http://stackoverflow.com/questions/15823383/how-to-use-akka-project-under-android (didn't help)
-dontwarn scala.**
-keepclassmembers class * {
    ** MODULE$;
}
-keep class scala.collection.SeqLike {
    public protected *;
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class org.eatbacon.sfth.AnalogUpdateActivity
-keep public class org.eatbacon.sfth.UpdateDataTask
-keep public class org.eatbacon.sfth.ShowChartActivity

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
#####Akka(来自Akka的proguard样本)
-keepclassmembernames类*实现akka.actor.actor{
akka.actor.ActorContext上下文;
akka.actor.ActorRef self;
}
-keep类*实现akka.actor.ActorRefProvider{
公众(……);
}
-keep类*实现akka.actor.ExtensionId{
公众(……);
}
-keep类*实现akka.actor.ExtensionProvider{
公众(……);
}
-保持类akka.actor.dactorref{
*;
}
-keep类*实现akka.actor.SupervisorStrategyConfiguration{
公众(……);
}
-keep class*扩展akka.dispatch.ExecutorServiceConfigurator{
公众(……);
}
-keep类*实现akka.dispatch.MailboxType{
公众(……);
}
-keep类*扩展akka.dispatch.MessageDispatcherConfiguration{
公众(……);
}
-保持类akka.event.Logging*
-保持类akka.event.Logging$LogExt{
公众(……);
}
-保持类akka.remote.DaemonMsgCreate{
*;
}
-keep类*扩展akka.remote.RemoteTransport{
公众(……);
}
-keep类*实现akka.routing.RouterConfig{
公众(……);
}
-keep类*实现akka.serialization.Serializer{
公众(……);
}
-dontwarn akka.remote.netty.nettyssl支持**
-阿卡**
#(我补充)
-保持类akka.event.slf4j.*{*;}
-保持类akka.actor.LightArrayRevolversScheduler{*;}
-保持课堂秩序**
-保持类akka.*{*;}
#内部类,如akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool
#-保持类akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool{*;}
#-keepclassmembers类akka.*{*;}
#-保持akka等级。***$*
#-保持课堂秩序**$*
-保留类com.percebemusic.pianoapp.core.package${*;}
-保持scala.concurrent.forkjoin.ForkJoinPool$ForkJoinWorkerThreadFactory{*;}
#下面需要保留akka反映的泛型类型参数
-保留署名
#来自https://spin.atomicobject.com/2013/06/20/akka-scala-on-android/ (没有帮助)
-保持类com.typesafe**
-保持课堂秩序**
-保持类scala.collection.immutable.StringLike{
*;
}
-keepclassswithmembers类*{
public(java.lang.String、akka.actor.ActorSystem$Settings、akka.event.EventStream、akka.actor.Scheduler、akka.actor.DynamicAccess);
}
-keepclassswithmembers类*{
public(akka.actor.ExtendedActorSystem);
}
-保持类scala.collection.SeqLike{
受公众保护*;
}
#来自http://macroid.github.io/modules/Akka.html (没有帮助)
-保持类akka.actor.LightArrayRevolversScheduler{*;}
-保持类akka.actor.LocalActorRefProvider{*;}
-保持类akka.actor.CreatorFunctionConsumer{*;}
-保持类akka.actor.TypedCreatorFunctionConsumer{*;}
-保持类akka.dispatch.BoundedDequeBasedMessageQueueSemantics{*;}
-保持类akka.dispatch.UnboundedMessageQueueSemantics{*;}
-保持类akka.dispatch.UnboundedQuebasedMessageQueueSemantics{*;}
-保持类akka.dispatch.DequeBasedMessageQueueSemantics{*;}
-keep类akka.actor.LocalActorRefProvider$Guardian{*;}
-keep类akka.actor.LocalActorRefProvider$SystemGuardian{*;}
-保持类akka.dispatch.UnboundedMailbox{*;}
-保持类akka.actor.DefaultSupervisorStrategy{*;}
-保持类macroid.akka.AkkaAndroidLogger{*;}
-保持类akka.event.Logging$LogExt{*;}
#来自http://stackoverflow.com/questions/15823383/how-to-use-akka-project-under-android (没有帮助)
-唐特旺斯卡拉**
-keepclassmembers类*{
**模块$;
}
-保持类scala.collection.SeqLike{
受公众保护*;
}
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-保持公共类org.eatbacon.sfth.AnalogUpdateActivity
-保持公共类org.eatbacon.sfth.UpdateDataTask
-保持公共类org.eatbacon.sfth.ShowChartActivity
-KeepClassSwithMemberNames类*{
本地人;
}
-KeepClassSwithMemberNames类*{
public(android.content.Context、android.util.AttributeSet);
}
-KeepClassSwithMemberNames类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
是什么原因造成的?或者有什么好的线索来追踪它

    IocContainer.getInstance().register(ActorSystem.class, package$.MODULE$.AppActorSystem());
#### Akka (from proguard sample for akka)
-keepclassmembernames class * implements akka.actor.Actor {
  akka.actor.ActorContext context;
  akka.actor.ActorRef self;
}
-keep class * implements akka.actor.ActorRefProvider {
  public <init>(...);
}
-keep class * implements akka.actor.ExtensionId {
  public <init>(...);
}
-keep class * implements akka.actor.ExtensionIdProvider {
  public <init>(...);
}
-keep class akka.actor.SerializedActorRef {
  *;
}
-keep class * implements akka.actor.SupervisorStrategyConfigurator {
  public <init>(...);
}
-keep class * extends akka.dispatch.ExecutorServiceConfigurator {
  public <init>(...);
}
-keep class * implements akka.dispatch.MailboxType {
  public <init>(...);
}
-keep class * extends akka.dispatch.MessageDispatcherConfigurator {
  public <init>(...);
}
-keep class akka.event.Logging*
-keep class akka.event.Logging$LogExt {
  public <init>(...);
}
-keep class akka.remote.DaemonMsgCreate {
  *;
}
-keep class * extends akka.remote.RemoteTransport {
  public <init>(...);
}
-keep class * implements akka.routing.RouterConfig {
  public <init>(...);
}
-keep class * implements akka.serialization.Serializer {
  public <init>(...);
}
-dontwarn akka.remote.netty.NettySSLSupport**
-dontnote akka.**

# (I added)
-keep class akka.event.slf4j.** { *; }
-keep class akka.actor.LightArrayRevolverScheduler { *; }
-keep class akka.**
-keep class akka.** { *; }
# Inner classes like akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool
#-keep class akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool { *; }
#-keepclassmembers class akka.** { *; }
#-keep class akka.**.*$*
#-keep class akka.**$*
-keep class com.percebemusic.pianoapp.core.package$ { *; }
-keep scala.concurrent.forkjoin.ForkJoinPool$ForkJoinWorkerThreadFactory { *; }

# below required to keep generic type parameters, on which akka reflects
-keepattributes Signature

# and from https://spin.atomicobject.com/2013/06/20/akka-scala-on-android/ (didn't help)
-keep class com.typesafe.**
-keep class akka.**
-keep class scala.collection.immutable.StringLike {
    *;
}
-keepclasseswithmembers class * {
    public <init>(java.lang.String, akka.actor.ActorSystem$Settings, akka.event.EventStream, akka.actor.Scheduler, akka.actor.DynamicAccess);
}
-keepclasseswithmembers class * {
    public <init>(akka.actor.ExtendedActorSystem);
}
-keep class scala.collection.SeqLike {
    public protected *;
}

# and from http://macroid.github.io/modules/Akka.html (didn't help)
-keep class akka.actor.LightArrayRevolverScheduler { *; }
-keep class akka.actor.LocalActorRefProvider { *; }
-keep class akka.actor.CreatorFunctionConsumer { *; }
-keep class akka.actor.TypedCreatorFunctionConsumer { *; }
-keep class akka.dispatch.BoundedDequeBasedMessageQueueSemantics { *; }
-keep class akka.dispatch.UnboundedMessageQueueSemantics { *; }
-keep class akka.dispatch.UnboundedDequeBasedMessageQueueSemantics { *; }
-keep class akka.dispatch.DequeBasedMessageQueueSemantics { *; }
-keep class akka.actor.LocalActorRefProvider$Guardian { *; }
-keep class akka.actor.LocalActorRefProvider$SystemGuardian { *; }
-keep class akka.dispatch.UnboundedMailbox { *; }
-keep class akka.actor.DefaultSupervisorStrategy { *; }
-keep class macroid.akka.AkkaAndroidLogger { *; }
-keep class akka.event.Logging$LogExt { *; }

# and from http://stackoverflow.com/questions/15823383/how-to-use-akka-project-under-android (didn't help)
-dontwarn scala.**
-keepclassmembers class * {
    ** MODULE$;
}
-keep class scala.collection.SeqLike {
    public protected *;
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class org.eatbacon.sfth.AnalogUpdateActivity
-keep public class org.eatbacon.sfth.UpdateDataTask
-keep public class org.eatbacon.sfth.ShowChartActivity

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}