Eclipse 中此 GWT 编译错误/依赖冲突的补救措施?

Remediation for this GWT compile error / dependency conflicts in Eclipse?

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

另一个问题是当我尝试启动开发模式时,gwt sdk 的 JettyLauncher 启动失败,我猜主要是因为我的 pom.xml.

中存在 jetty 9.3

是否有任何 Eclipse 用户有解决此类错误的方法?我认为如果有办法让 gwt sdk 运行 依赖于它自己,那将是和平的(这两个冲突不应该影响产品部署,它只是 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.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.run(SuperDevListener.java:84)

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

1) GWT 编译错误:

我检查了所有隐藏的 asm-* 依赖项,发现 tika(在我的例子中是 1.9)使用的一个 (asm-debug-all) 是 4.x.x,而所有其他 asm-依赖项都是 5.0。 3.我指定了 asm-debug-all 的显式依赖 5.0.3,gwt 编译器很满意。

2) GWT 的 DevMode 启动:

阅读后 https://github.com/gwtproject/gwt/issues/8712, I was pretty sure the jetty in DevMode should be an old version (it is a 8.x.y as I got from the log, for gwt 2.7.0). Unable to run mavenized GWT application in eclipse with embedded Tomcat 建议重写 ServletContainerLauncher,我不知道如何实现,并且 运行 设置一个单独的 Tomcat 服务器作为代码服务器的主机。在修改启动配置文件后,我了解到类路径中库的顺序可以更改,所以我将 gwt-dev 移动到项目的 src 类路径之上,然后宾果游戏,DevMode 运行s 顺利!

注意:在 maven 中添加 gwt-codeserver 依赖项,并将其置于 jetty 入口之上也会让 DevMode 工作,但是真正需要的 Jetty 也将 运行 与 8.x.y版本.