Я столкнулся с исключительной ситуацией при компиляции проекта GWT с использованием maven, но он работает в eclipse. Я провел последние несколько часов в поиске в Google и StackOverflow, но хотя пара результатов была актуальной, ни один из них не подходил для моей ситуации.
Среда:
- OSX 10.10.1
- Java 1.7.0_67 64 бит
- GWT 2.7.0
- GWTP 1.3.1
- GAE 1.9.17
- Maven 3.2.3
Я могу запустить проект в eclipse, используя режим Super Dev Mode, и он отлично работает. Я могу использовать плагин Eclipse GWT для компиляции проекта - он успешно завершается. Но если я попытаюсь скомпилировать через терминал, используя mvn clean compile gwt:compile
, я получаю следующую ошибку:
[INFO] Compiling module com.example.foo.Foo
[INFO] [ERROR] An internal compiler exception occurred
[INFO] com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:121)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:296)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:285)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:128)
[INFO] at com.google.gwt.dev.jjs.ast.JDeclarationStatement.traverse(JDeclarationStatement.java:49)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor$ListContext.traverse(JModVisitor.java:95)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemove(JModVisitor.java:351)
[INFO] at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:92)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:381)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:293)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:149)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:145)
[INFO] at com.google.gwt.dev.jjs.ast.JMethodBody.traverse(JMethodBody.java:83)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:381)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:293)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:285)
[INFO] at com.google.gwt.dev.jjs.ast.JMethod.visitChildren(JMethod.java:600)
[INFO] at com.google.gwt.dev.jjs.ast.JMethod.traverse(JMethod.java:569)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:381)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:293)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:285)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst.mainLoop(UnifyAst.java:1505)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst.exec(UnifyAst.java:870)
[INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler$Precompiler.unifyJavaAst(JavaToJavaScriptCompiler.java:1305)
[INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler$Precompiler.constructJavaAst(JavaToJavaScriptCompiler.java:1038)
[INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler$Precompiler.precompile(JavaToJavaScriptCompiler.java:954)
[INFO] at com.google.gwt.dev.jjs.MonolithicJavaToJavaScriptCompiler.precompile(MonolithicJavaToJavaScriptCompiler.java:303)
[INFO] at com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:38)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:286)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:229)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:145)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:206)
[INFO] at com.google.gwt.dev.Compiler.run(Compiler.java:158)
[INFO] at com.google.gwt.dev.Compiler$1.run(Compiler.java:120)
[INFO] at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55)
[INFO] at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50)
[INFO] at com.google.gwt.dev.Compiler.main(Compiler.java:127)
[INFO] Caused by: java.lang.NoSuchMethodError: com.google.gwt.uibinder.rebind.UiBinderWriter.<init>(Lcom/google/gwt/core/ext/typeinfo/JClassType;Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/ext/typeinfo/TypeOracle;Lcom/google/gwt/uibinder/rebind/MortalLogger;Lcom/google/gwt/uibinder/rebind/FieldManager;Lcom/google/gwt/uibinder/rebind/messages/MessagesWriter;Lcom/google/gwt/uibinder/rebind/DesignTimeUtils;Lcom/google/gwt/uibinder/rebind/UiBinderContext;ZZLjava/lang/String;)V
[INFO] at com.google.gwt.uibinder.rebind.UiBinderGenerator.generateOnce(UiBinderGenerator.java:187)
[INFO] at com.google.gwt.uibinder.rebind.UiBinderGenerator.generate(UiBinderGenerator.java:135)
[INFO] at com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally(IncrementalGenerator.java:40)
[INFO] at com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:760)
[INFO] at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:160)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:79)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:276)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:265)
[INFO] at com.google.gwt.dev.DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(DistillerRebindPermutationOracle.java:87)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.createStaticRebindExpression(UnifyAst.java:485)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.createRebindExpression(UnifyAst.java:443)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.handleMagicMethodCall(UnifyAst.java:576)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.endVisit(UnifyAst.java:306)
[INFO] at com.google.gwt.dev.jjs.ast.JMethodCall.traverse(JMethodCall.java:248)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:381)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:293)
[INFO] ... 35 more
[INFO] [ERROR] at com_gwtplatform_mvp_client_DesktopGinjector_DesktopGinjectorGinjector_fragment.java(91): GWT.create(ApplicationView$Binder.class)
[INFO] com.google.gwt.dev.jjs.ast.JMethodCall
[INFO] [ERROR] at com_gwtplatform_mvp_client_DesktopGinjector_DesktopGinjectorGinjector_fragment.java(91): Object created = GWT.create(ApplicationView$Binder.class)
[INFO] com.google.gwt.dev.jjs.ast.JDeclarationStatement
[INFO] [ERROR] at com_gwtplatform_mvp_client_DesktopGinjector_DesktopGinjectorGinjector_fragment.java(90): {
[INFO] Object created = GWT.create(ApplicationView$Binder.class);
[INFO] assert created instanceof ApplicationView$Binder;
[INFO] ApplicationView$Binder result = (ApplicationView$Binder) created;
[INFO] this.memberInject_Key$type$com$example$foo$client$application$ApplicationView$Binder$_annotation$$none$$(result);
[INFO] return result;
[INFO] }
[INFO] com.google.gwt.dev.jjs.ast.JBlock
[INFO] [ERROR] at com_gwtplatform_mvp_client_DesktopGinjector_DesktopGinjectorGinjector_fragment.java(90): {
[INFO] Object created = GWT.create(ApplicationView$Binder.class);
[INFO] assert created instanceof ApplicationView$Binder;
[INFO] ApplicationView$Binder result = (ApplicationView$Binder) created;
[INFO] this.memberInject_Key$type$com$example$foo$client$application$ApplicationView$Binder$_annotation$$none$$(result);
[INFO] return result;
[INFO] }
[INFO] com.google.gwt.dev.jjs.ast.JMethodBody
[INFO] [ERROR] at com_gwtplatform_mvp_client_DesktopGinjector_DesktopGinjectorGinjector_fragment.java(90): public ApplicationView$Binder get_Key$type$com$example$foo$client$application$ApplicationView$Binder$_annotation$$none$$();
[INFO]
[INFO] com.google.gwt.dev.jjs.ast.JMethod
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.013 s
[INFO] Finished at: 2014-12-06T20:28:36-05:00
[INFO] Final Memory: 13M/310M
[INFO] ------------------------------------------------------------------------
Я использовал плагин GWTP для создания базового проекта для использования в Google App Engine, и мне пришлось настроить ряд вещей, чтобы получить его, чтобы он работал локально и передавался в движок приложения. Он отлично компилировался в то время, eclipse или maven. Я сделал еще несколько модификаций, в основном возился с пользовательским интерфейсом и журналом GWT, все время тестируя в режиме Super Dev Mode, и он работал нормально. теперь работает нормально. Поскольку это не было сделано, я не пытался загружать в GAE.
Исследовать:
Один из них связан с унаследованные модули, которые переопределяли реализацию GWT UIBinder, но я не добавил никаких наследований или зависимостей от архетипа, который я использовал для его создания. Плюс работает через eclipse / SuperDevMode. другой был о том, чтобы заставить компиляцию работать в eclipse, и я, возможно, использовал его, чтобы заставить работать eclipse, когда я впервые работал над проектом неделю назад. Но он работает в eclipse, но не через командную строку maven.
Я пытался удалить различные модули, которые не требуются для gwt / gwtp, и мне не повезло. Я указал версию импорта gwt-user и gwt-dev, ничего. Я всегда получаю одну и ту же ошибку, и это сводит меня с ума! Я просто не могу понять, почему он не компилируется с «нормальным» maven.
com.google.gwt.uibinder.rebind.UiBinderWriter
, значит, это проблема упорядочивания пути к классам. Либо вы изменили версию Maven, и она по-другому упорядочивает зависимости, либо вы изменили порядок объявления зависимостей в своемpom.xml
. Попробуйте использовать открытый тип в Eclipse, чтобы найти зависимость, которая содержит оскорбительный устаревший класс, и попробуйте обновить эту зависимость с помощью той, которая совместима с GWT 2.7 (и / или изменить порядок вашего POM) - person Thomas Broyer   schedule 07.12.2014