RestyGWTのコンパイルに失敗する



問題

Compiling module com.mycompany.HelloWorld
   [ERROR] An internal compiler exception occurred
com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.
    at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:111)
    at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:276)


Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlTransient
    at org.fusesource.restygwt.rebind.JsonEncoderDecoderClassCreator.isXmlTransient(JsonEncoderDecoderClassCreator.java:856)
    at org.fusesource.restygwt.rebind.JsonEncoderDecoderClassCreator.getFields(JsonEncoderDecoderClassCreator.java:1016)
    at org.fusesource.restygwt.rebind.JsonEncoderDecoderClassCreator.getFields(JsonEncoderDecoderClassCreator.java:929)

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlTransient
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 67 more
FAILED

原因

この手はすべて同じなのだが、Java9以降でJAXBが無効化され、JAX11以降で削除されたためだ。

解決

java9, 10であれば有効化すれば良いというが、Java12を使っているのでそれもできない。以下を入れる。

  implementation "javax.xml.bind:jaxb-api:2.2.11"
  implementation "com.sun.xml.bind:jaxb-core:2.2.11"
  implementation "com.sun.xml.bind:jaxb-impl:2.2.11"
  implementation "javax.activation:activation:1.1.1"