GeekFactory

int128.hatenablog.com

JDK 7u65/8u11以降に存在するバイトコード検証の不具合

JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()this()を使うと実行時エラーが発生します。

Gradle SSH Pluginでもコンストラクタ内でsuper()を実行するコードがあり、JDK 7u65/8u11以降で正常に動作しない問題があります。最近のJDKで不具合が修正されているか確認してみたのですが、やはり動作しませんでした。結果は以下の通りです。

  • 成功 7u60-b19
  • 失敗 7u65-b17
  • 失敗 7u67-b01
  • 成功 8u5-b13
  • 失敗 8u11-b12
  • 失敗 8u20-b26

残念ながら、GROOVY-6951 のスレッドによると8u40まで待つしかないようです。

なお、Travis CIでは当該の不具合に対する暫定対処が行われており、.travis.ymloraclejdk7/oraclejdk8を指定した場合は7u60/8u5が選択されるようになっています。