最新の JDK 7 (u45) と ProGuard バージョン 4.10 を使用しています。
最近、ディストリビューションを難読化した後、次のエラーでディストリビューションを開始できませんでした。
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at
branch target 155
Exception Details:
Location:
com/bla/bla/service/ioc/SpringBootstrap.c()V @0: getstatic
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: b200 73b6 008b 9900 82b2 0073 b800 933b
0000010: 1a99 0074 b200 73b6 008d 9900 6bb2 0074
0000020: 1221 b600 cfb8 0092 4c2b b600 9c12 1db9
...
Exception Handler Table:
bci [0, 152] => handler: 155
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
StackOverflow でこのトピックに関するいくつかの議論を見つけました。
- java-lang-verifyerror-expecting-a-stackmap-frame-at-branch-target-jdk-1-7
- java-lang-verifyerror-expecting-a-stackmap-frame
- 理解-解決方法-不一致-スタックマップ-フレーム-例外
- java-7-inconsistent-stackmap-frames-need-help-understanding-why-solution-wor
私が理解したところによると、Java 7 はより厳密な検証を使用し、コードを検証するためにクラスのスタック マップを導入しました。したがって、プロジェクトをプロガードで難読化すると、この例外のみが発生するため、難読化プロセス中に何らかの形でこのマップが破損しているように見えます。
-XX:-UseSplitVerifierで検証を無効にし、ビルドされた jar を開始すると役立ちますが、それがこの問題を処理する方法であるかどうかはよくわかりません。
それで、他の誰かが同様のエラーを起こしたのだろうか?または、難読化プロセスのプロガード構成を調整するなど、これを解決する特定の方法を誰かが知っている場合は?