【问题标题】:GWT Compilation error in Eclipse OxygenEclipse Oxygen 中的 GWT 编译错误
【发布时间】:2017-08-24 00:16:30
【问题描述】:

当我尝试在 Eclipse 中将我的 Libgdx 游戏编译为 HTML5 时,我遇到了这些奇怪的错误。

Tracing compile failure path for type 'java.util.function.DoubleUnaryOperator'
     [ERROR] Errors in 'com/google/gwt/emul/java/util/function/DoubleUnaryOperator.java'
     [ERROR] Line 33: Default methods are allowed only at source level 1.8 or above
     [ERROR] Line 35: Cannot refer to the non-final local variable after defined in an enclosing scope
     [ERROR] Line 40: Cannot refer to the non-final local variable before defined in an enclosing scope
     [ERROR] Line 40: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 35: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 38: Default methods are allowed only at source level 1.8 or above
     [ERROR] Line 27: Illegal modifier for the interface method identity; only public & abstract are permitted
     [ERROR] Line 27: Static methods are allowed in interfaces only at source level 1.8 or above
     [ERROR] Line 28: Lambda expressions are allowed only at source level 1.8 or above
Tracing compile failure path for type 'java.util.stream.Collectors'
  [ERROR] Errors in 'com/google/gwt/emul/java/util/stream/Collectors.java'
     [ERROR] Line 291: This static method of interface Collector can only be accessed as Collector.of
     [ERROR] Line 348: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 96: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 223: The method of(Supplier<R>, BiConsumer<R,T>, BinaryOperator<R>, Collector.Characteristics...) in the type Collector is not applicable for the arguments (() -> {}, (<no type> u, <no type> t) -> {}, (Object[] u1, Object[] u2) -> {}, (Object[] a) -> {})
     [ERROR] Line 311: Constructor references are allowed only at source level 1.8 or above
     [ERROR] Line 192: Method references are allowed only at source level 1.8 or above
     [ERROR] Line 205: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 143: Constructor references are allowed only at source level 1.8 or above
     [ERROR] Line 168: Lambda expressions are allowed only at source level 1.8 or above
     [ERROR] Line 339: Lambda expressions are allowed only at source level 1.8 or above...

在我的 build.gradle 中,我检查了 gwtVersion 使用的是 2.7.0 并且我的 sourceCompatibility 是 1.8。我在这件事上已经好几天了,我似乎无法弄清楚。

求救!!!

更新

感谢科林的反馈。这是我现在遇到的错误:

[ERROR] 发生内部编译器异常 com.google.gwt.dev.jjs.InternalCompilerException:构造 Java AST 时出错 在 com.google.gwt.dev.jjs.impl.GwtAstBuilder.translateException(GwtAstBuilder.java:3099) 在 com.google.gwt.dev.jjs.impl.GwtAstBuilder$AstVisitor.endVisit(GwtAstBuilder.java:352) 在 org.eclipse.jdt.internal.compiler.ast.AllocationExpression.traverse(AllocationExpression.java:670) 在 org.eclipse.jdt.internal.compiler.ast.ReturnStatement.traverse(ReturnStatement.java:373) 在 org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:347) 在 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1379) 在 com.google.gwt.dev.jjs.impl.GwtAstBuilder.process(GwtAstBuilder.java:3058) 在 com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater$UnitProcessorImpl.process(CompilationStateBuilder.java:141) 在 com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.process(JdtCompiler.java:384) 在 org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:470) 在 com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:985) 在 com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:339) 在 com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:580) 在 com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:513) 在 com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:499) 在 com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:668) 在 com.google.gwt.dev.Precompile.precompile(Precompile.java:255) 在 com.google.gwt.dev.Precompile.precompile(Precompile.java:229) 在 com.google.gwt.dev.Precompile.precompile(Precompile.java:145) 在 com.google.gwt.dev.Compiler.run(Compiler.java:206) 在 com.google.gwt.dev.Compiler.run(Compiler.java:158) 在 com.google.gwt.dev.Compiler$1.run(Compiler.java:120) 在 com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55) 在 com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50) 在 com.google.gwt.dev.Compiler.main(Compiler.java:127) 引起:java.lang.NullPointerException 在 com.google.gwt.dev.jjs.impl.ReferenceMapper.get(ReferenceMapper.java:99) 在 com.google.gwt.dev.jjs.impl.GwtAstBuilder$AstVisitor.pushNewExpression(GwtAstBuilder.java:2642) 在 com.google.gwt.dev.jjs.impl.GwtAstBuilder$AstVisitor.endVisit(GwtAstBuilder.java:350) ... 23 更多 [错误] 在 TimeZone.java(126):新字符串(数据) org.eclipse.jdt.internal.compiler.ast.AllocationExpression

也许我必须将其更新到 GWT 2.8.0?

P.S:在我的 html\war\WEB-INF\lib 目录中,我有以下 jars:

这个设置正确吗?

更新:

现在更新到 GWT 2.8.1。现在我收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.gwt.util.regexfilter.RegexFilter: method <init>()V not found
at com.google.gwt.util.regexfilter.WhitelistRegexFilter.<init>(WhitelistRegexFilter.java:21)
at com.google.gwt.dev.jjs.JJSOptionsImpl.<init>(JJSOptionsImpl.java:54)
at com.google.gwt.dev.PrecompileTaskOptionsImpl.<init>(PrecompileTaskOptionsImpl.java:39)
at com.google.gwt.dev.CompilerOptionsImpl.<init>(CompilerOptionsImpl.java:30)
at com.google.gwt.dev.Compiler.main(Compiler.java:108)

我是否应该清理我的 html\war\WEB-INF\lib 目录中的(或其中一些)jar 并使用其他 jar?

【问题讨论】:

  • 引导我找到一些解决方案而不是选择投票结束这个问题将是最有帮助的。我对 SO 和 Google 进行了研究,但他们都没有给我解决方案。
  • 你有没有设法解决这个问题?

标签: java eclipse gwt libgdx


【解决方案1】:

如果您使用的是 GWT 2.7,则无法使用 Java8。如果您想使用 Java 8,请升级到 GWT 2.8(或更好的 2.8.1)。

也就是说,如果您完全找到了这些类,则表明您的类路径中已经有 GWT 2.8 的部分,并且混合来自每个 GWT 版本的点点滴滴不会很好.最好将所有内容升级到最新的 2.8.1。

【讨论】:

  • 奇怪的是,我可以t seem to find those classes on my computer. Is it possible that in my build path that Im 引用 jre 系统库 1.8.0。跟那个系统库有关系吗?
  • 它表明这是 GWT 的一部分:com/google/gwt/emul/java/util/stream/Collectors.java,而不是您的 JDK 的一部分。此外,GWT 的工作方式是通过仅提供 .java 文件而不是 .class 文件来模拟 JRE 类,因此您将无法在计算机上找到该类。查找 gwt-user-2.8.0.jar 或 .java 文件本身,因为这几乎肯定是错误的。
  • 我在任何地方都找不到 gwt-user-2.8.0.jar。我的引用库中有以下 jar:gwt-user.jar、gwt-codeserver.jar、gwt-dev.jar、validation-api-1.0.0.GA-sources.jar、validation-api-1.0.0。 GA.jar 和 gdx-backend-gwt-1.6.5.jar(都位于文件夹 eclipse/plugins/com.gwtplugins.gwt.eclipse.sdkbundle.gwt27_2.7.0.201707251900/gwt-2.7.0/ 中)。我是否必须删除 gwt-user.jar 或其他 jar?
  • 查看gwt-user.jar的文件是什么版本,有可能是2.8。
  • Ive looked in the com/google/gwt/dev/About.propertie in the jar gwt-dev.jar and its 使用 2.7.0 版本。我应该检查所有其他 jar 文件是否为 2.8?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多