GWT:GWTコンパイルでjava.lang.IncompatibleClassChangeError
問題
GWTのコンパイルで次のようなエラーが出た。完全にコンパイラがストップしてしまう。
[ERROR] Unexpected internal compiler error
java.lang.IncompatibleClassChangeError: class com.google.gwt.dev.javac.BytecodeSignatureMaker$CompileDependencyVisitor has interface org.objectweb.asm.ClassVisitor as super class
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at com.google.gwt.dev.javac.BytecodeSignatureMaker.visitCompileDependenciesInBytecode(BytecodeSignatureMaker.java:227)
at com.google.gwt.dev.javac.BytecodeSignatureMaker.getCompileDependencySignature(BytecodeSignatureMaker.java:209)
at com.google.gwt.dev.javac.CompiledClass.getSignatureHash(CompiledClass.java:165)
at com.google.gwt.dev.javac.Dependencies$Ref.<init>(Dependencies.java:41)
at com.google.gwt.dev.javac.Dependencies$Ref.<init>(Dependencies.java:36)
at com.google.gwt.dev.javac.Dependencies.resolve(Dependencies.java:100)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:352)
at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:548)
at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:479)
at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:465)
at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:423)
at com.google.gwt.dev.Precompile.precompile(Precompile.java:222)
at com.google.gwt.dev.Precompile.precompile(Precompile.java:202)
at com.google.gwt.dev.Precompile.precompile(Precompile.java:143)
at com.google.gwt.dev.Compiler.compile(Compiler.java:204)
at com.google.gwt.dev.Compiler.compile(Compiler.java:155)
at com.google.gwt.dev.Compiler.compile(Compiler.java:144)
at com.google.gwt.dev.Compiler$1.run(Compiler.java:118)
at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55)
at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50)
at com.google.gwt.dev.Compiler.main(Compiler.java:125)
> Task :sampleModules FAILED
原因
これだった。vaadinも使っていないし、hibernateも使っていないのだが、原因は同じである。
つまり、他のライブラリを混ぜるとGWTコンパイラが使用しているASMライブラリとは別のものが入ってしまうせいである。
しかも、コンパイラやコードサーバが格納されているgwt-dev.jarは、他のライブラリが「ほぐして入れてある」ので、何を使っているのか、どのバージョンなのかがわかりにくいのである。
対策
根本的な原因はgwtp-clientにあった。ここから不要なものを削除する。しかし、なんだってgwt-userやらgwt-devまで入れてしまうのだろうか???こちらの使いたい2.8.2では無いので必ず除去しなければならないのだ。
dependencies {
api('com.gwtplatform:gwtp-mvp-client:1.6') {
exclude module: 'gwt-user'
exclude module: 'gwt-dev'
exclude module: 'velocity'
exclude module: 'jsr305'
exclude module: 'asm' // <-------
}
ディスカッション
コメント一覧
まだ、コメントがありません