2015-08-08 91 views
2

在Eclipse中,我有一個maven項目正在進行,我將GWT添加到它中。 (所以這不是Google Web應用程序項目) 我放下了gwt部件,並且「GWT編譯...」命令失敗,並在最後附加了消息。我發現在maven中取消了具有asm依賴性的tika神器,有助於繼續gwt編譯。在Eclipse中修復此GWT編譯錯誤/依賴項衝突?

另一個問題是,當我嘗試啓動dev模式時,gwt sdk的JettyLauncher未能啓動,我猜主要是由於我的pom.xml中存在jetty 9.3。

是否有任何eclipse用戶有這些類型的錯誤的解決方法?我認爲如果有一種方法讓gwt sdk運行在自己的依賴上(這兩個衝突不應該影響prod部署,只是google eclipse插件工具取決於項目的類路徑),它會是和平的。

我可以將gwt部分分成不同的項目,但將它們放在一起顯然要方便得多。

GWT編譯錯誤:啓動開發模式時

[ERROR] Unexpected internal compiler error 
java.lang.IllegalArgumentException 
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:78) 
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:63) 
    at com.google.gwt.dev.javac.BytecodeSignatureMaker$CompileDependencyVisitor.<init>(BytecodeSignatureMaker.java:59) 
    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:166) 
    at com.google.gwt.dev.javac.Dependencies$Ref.<init>(Dependencies.java:42) 
    at com.google.gwt.dev.javac.Dependencies$Ref.<init>(Dependencies.java:37) 
    at com.google.gwt.dev.javac.Dependencies.resolve(Dependencies.java:114) 
    at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:366) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:580) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:513) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:499) 
    at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:668) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:255) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:229) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:145) 
    at com.google.gwt.dev.Compiler.run(Compiler.java:206) 
    at com.google.gwt.dev.Compiler.run(Compiler.java:158) 
    at com.google.gwt.dev.Compiler$1.run(Compiler.java:120) 
    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:127) 

錯誤:

Exception in thread "main" java.lang.NoSuchMethodError: org.eclipse.jetty.server.AbstractConnector: method <init>()V not found 
    at org.eclipse.jetty.server.nio.AbstractNIOConnector.<init>(AbstractNIOConnector.java:30) 
    at org.eclipse.jetty.server.nio.SelectChannelConnector.<init>(SelectChannelConnector.java:82) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.getConnector(JettyLauncher.java:803) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:729) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:632) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1054) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:413) 
java.lang.IllegalArgumentException 
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:78) 
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:63) 
    at com.google.gwt.dev.javac.BytecodeSignatureMaker$CompileDependencyVisitor.<init>(BytecodeSignatureMaker.java:59) 
    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:166) 
    at com.google.gwt.dev.javac.Dependencies.validateClass(Dependencies.java:178) 
    at com.google.gwt.dev.javac.Dependencies.validate(Dependencies.java:135) 
    at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.removeInvalidCachedUnitsAndRescheduleCorrespondingBuilders(CompilationStateBuilder.java:430) 
    at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:369) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:580) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:513) 
    at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:499) 
    at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:668) 
    at com.google.gwt.dev.codeserver.Recompiler.initWithoutPrecompile(Recompiler.java:200) 
    at com.google.gwt.dev.codeserver.Outbox.maybePrecompile(Outbox.java:82) 
    at com.google.gwt.dev.codeserver.Outbox.<init>(Outbox.java:61) 
    at com.google.gwt.dev.codeserver.CodeServer.makeOutboxes(CodeServer.java:156) 
    at com.google.gwt.dev.codeserver.CodeServer.start(CodeServer.java:118) 
    at com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:91) 
    at com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:50) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.google.gwt.dev.shell.SuperDevListener$1.run(SuperDevListener.java:84) 

回答

2

所以,一些挖後,我發現兩個2個問題的解決方法。

1)GWT編譯錯誤:

我經歷的所有隱藏asm- *依賴關係,並找到了一個在我的情況下使用蒂卡(1.9(ASM-調試全部))爲4.xx的,而所有其他的asm依賴性是5.0.3。我指定了asm-debug-all 5.0.3的顯式依賴,並且gwt編譯器很高興。

2)GWT的DevMode的推出:

閱讀https://github.com/gwtproject/gwt/issues/8712後,我敢肯定在DevMode的碼頭應該是一箇舊的版本(這是一個8.xy因爲我從日誌中獲得,對GWT的2.7.0 )。 Unable to run mavenized GWT application in eclipse with embedded Tomcat建議覆蓋ServletContainerLauncher,我不知道如何實現,並運行單獨的Tomcat服務器來充當代碼服務器的主機。在修改啓動配置文件之後,我瞭解到classpath中libs的順序可能會改變,所以我將gwt-dev移到了項目的src類路徑之上,而且賓果,DevMode運行順利!

注意:在maven中添加gwt-codeserver依賴關係,並將其設置爲高於jetty條目也可以讓DevMode工作,但是真正需要的Jetty也會使用8.x.y版本運行。