java.lang.VerifyError 使用 sbt-assembly 着色后

java.lang.VerifyError after shading with sbt-assembly

我们在 java.lang.VerifyError: using spark with akka after shading with sbt-assembly 中报告的 Gearpump 中发现了类似的问题。错误就像

Exception in thread "main" java.lang.VerifyError: Inconsistent stackmap frames at branch target 152
Exception Details:
  Location:
    akka/dispatch/Mailbox.processAllSystemMessages()V @152: getstatic
  Reason:
    Type top (current frame, locals[9]) is not assignable to 'akka/dispatch/sysmsg/SystemMessage' (stack map, locals[9])
  Current Frame:
    bci: @131
    flags: { }
    locals: { 'akka/dispatch/Mailbox', 'java/lang/InterruptedException', 'akka/dispatch/sysmsg/SystemMessage', top, 'akka/dispatch/Mailbox', 'java/lang/Throwable', 'java/lang/Throwable' }
    stack: { integer }
  Stackmap Frame:
    bci: @152
    flags: { }
    locals: { 'akka/dispatch/Mailbox', 'java/lang/InterruptedException', 'akka/dispatch/sysmsg/SystemMessage', top, 'akka/dispatch/Mailbox', 'java/lang/Throwable', 'java/lang/Throwable', top, top, 'akka/dispatch/sysmsg/SystemMessage' }
    stack: { }
  Bytecode:
    0x0000000: 014c 2ab2 0132 b601 35b6 0139 4db2 013e
    0x0000010: 2cb6 0142 9900 522a b600 c69a 004b 2c4e
    0x0000020: b201 3e2c b601 454d 2db9 0148 0100 2ab6
    0x0000030: 0052 2db6 014b b801 0999 000e bb00 e759
    0x0000040: 1301 4db7 010f 4cb2 013e 2cb6 0150 99ff
    0x0000050: bf2a b600 c69a ffb8 2ab2 0132 b601 35b6
    0x0000060: 0139 4da7 ffaa 2ab6 0052 b600 56b6 0154
    0x0000070: b601 5a3a 04a7 0091 3a05 1905 3a06 1906
    0x0000080: c100 e799 0015 1906 c000 e73a 0719 074c
    0x0000090: b200 f63a 08a7 0071 b201 5f19 06b6 0163
    0x00000a0: 3a0a 190a b601 6899 0006 1905 bf19 0ab6
    0x00000b0: 016c c000 df3a 0b2a b600 52b6 0170 b601
    0x00000c0: 76bb 000f 5919 0b2a b600 52b6 017a b601
    0x00000d0: 80b6 0186 2ab6 018a bb01 8c59 b701 8e13
    0x00000e0: 0190 b601 9419 09b6 0194 1301 96b6 0194
    0x00000f0: 190b b601 99b6 0194 b601 9ab7 019d b601
    0x0000100: a3b2 00f6 3a08 b201 3e2c b601 4299 0026
    0x0000110: 2c3a 09b2 013e 2cb6 0145 4d19 09b9 0148
    0x0000120: 0100 1904 2ab6 0052 b601 7a19 09b6 01a7
    0x0000130: a7ff d62b c600 09b8 0109 572b bfb1
  Exception Handler Table:
    append_frame(@13,Object[#231],Object[#177])
    append_frame(@71,Object[#177])
    chop_frame(@102,1)
    full_frame(@120,{Object[#2],Object[#231],Object[#177],Top,Object[#2],Object[#177]},{Object[#223]})
    full_frame(@152,{Object[#2],Object[#231],Object[#177],Top,Object[#2],Object[#223],Object[#223],Top,Top,Object[#177]},{})
    append_frame(@173,Object[#357])
    full_frame(@262,{Object[#2],Object[#231],Object[#177],Top,Object[#2]},{})
    same_frame(@307)
    same_frame(@317)

  at akka.dispatch.Mailboxes.<init>(Mailboxes.scala:33)
  at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:779)
  at akka.actor.ActorSystem$.apply(ActorSystem.scala:245)
  at akka.actor.ActorSystem$.apply(ActorSystem.scala:288)
  at akka.actor.ActorSystem$.apply(ActorSystem.scala:263)
  at org.apache.gearpump.cluster.main.Local$.local(Local.scala:75)
  at org.apache.gearpump.cluster.main.Local$.main(Local.scala:56)
  at org.apache.gearpump.util.AkkaApp$$anonfun$main.apply(AkkaApp.scala:42)
  at org.apache.gearpump.util.AkkaApp$$anonfun$main.apply(AkkaApp.scala:42)
  at scala.util.Try$.apply(Try.scala:192)
  at org.apache.gearpump.util.AkkaApp$class.main(AkkaApp.scala:41)
  at org.apache.gearpump.cluster.main.Local$.main(Local.scala:35)
  at org.apache.gearpump.cluster.main.Local.main(Local.scala)

Link 用于 Gearpump 构建文件。

我们使用 sbt-assembly 0.14.3 和 Akka 2.4.16

看起来像一个 asm 错误。 我们找到了修复 sbt-assembly (https://github.com/sbt/sbt-assembly/issues/205#issuecomment-279967557) 的 Gearpump 解决方法。

感谢https://github.com/pomadchin there is a PR waiting to be approved (https://github.com/sbt/sbt-assembly/pull/237)