在Eclipse中修复此GWT编译错误/依赖项冲突?

时间:2015-08-08 07:48:05

标签: eclipse gwt

在Eclipse中,我正在进行一个maven项目,我正在将GWT添加到其中。 (所以这不是Google Web应用程序项目) 我放下了gwt部分,“GWT Compile ...”命令失败,最后附加了消息。我发现删除maven中的tika工件,它具有asm依赖性,有助于继续gwt编译。

另一个问题是当我尝试启动开发模式时,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)

1 个答案:

答案 0 :(得分:3)

因此,经过一番挖掘后,我找到了两个问题的解决方法。

1)GWT编译错误:

我浏览了所有隐藏的asm- *依赖项,发现tika(在我的情况下为1.9)使用的一个(asm-debug-all)是4.x.x,而所有其他asm-dependencies都是5.0.3。我指定了asm-debug-all的5.0.3的显式依赖项,并且gwt编译器很高兴。

2)GWT的DevMode发布:

在阅读https://github.com/gwtproject/gwt/issues/8712后,我非常确定DevMode中的码头应该是旧版本(因为我从日志中得到的是8.x.y,对于gwt 2.7.0)。 Unable to run mavenized GWT application in eclipse with embedded Tomcat建议覆盖ServletContainerLauncher,我不知道如何实现,并运行一个单独的Tomcat服务器作为代码服务器的主机。在修改了启动配置文件后,我了解到类路径中lib的顺序可以改变,所以我将gwt-dev移到了项目的src类路径之上,而bingo,DevMode运行顺利!

注意:在maven中添加gwt-codeserver依赖项,并使其高于jetty条目也会让DevMode工作,但是这样真正的Jetty也将运行8.xy版本。 < / p>