GWT 2.6.1未知的编译问题

时间:2014-09-05 15:38:03

标签: eclipse maven gwt smartgwt

我知道其他人在GWT编译方面遇到了问题,但在这种情况下我不知所措。 我正在使用GWT 2.6.1和相同版本的gwt-maven-plugin,2.6.1

首先GWT和/或SmartGWT是否支持JDK 1.8,现在只支持1.7?我使用的是jdk 1.7,但最终想尝试1.8。

其次,当我在eclipse中进行maven构建时,我得到了这个错误...... 然而,当我从GWT Eclipse插件执行GWT编译时,我右键单击该项目,并将其告诉GWT Compile,它没有任何问题。

[INFO] --- gwt-maven-plugin:2.6.1:compile (default) @ rm-ui ---
[INFO] auto discovered modules [com.redi2.products.rm.RevenueManager]
[INFO] Compiling module com.redi2.products.rm.RevenueManager
[INFO] [ERROR] Unexpected internal compiler error
[INFO] java.lang.NoSuchFieldError: warningThreshold
[INFO]  at com.google.gwt.dev.javac.JdtCompiler$1.<init>(JdtCompiler.java:505)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.getStandardCompilerOptions(JdtCompiler.java:503)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.getCompilerOptions(JdtCompiler.java:533)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:878)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:284)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:511)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:434)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:420)
[INFO]  at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:495)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:241)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:223)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:139)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:167)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:132)
[INFO]  at com.google.gwt.dev.Compiler$1.run(Compiler.java:99)
[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:106)

下一步是退出eclipse并从命令行尝试mvn构建,但这不起作用。所以,我做了以下几点:

mvn clean  - and that correctly deletes my target directory and the gwt-unitCache.
mvn gwt:clean
mvn -X -e gwt:compile --debug

起初,它告诉我它无法找到我的:com.tholmes.products.App.gwt.xml 但我知道它在那里,我甚至删除了文件并重新添加它。它是classpath的重要组成部分,并且格式正确。

所以,我做了一个:

mvn gwt:eclipse  
mvn gwt:eclipseTest

这似乎解决了无法找到gwt.xml文件的问题。

所以,现在我再试一次,这就是我得到的所有调试和堆栈跟踪。

[INFO] Compiling module com.redi2.products.rm.RevenueManager
[INFO] [ERROR] Unexpected internal compiler error
[INFO] java.lang.NoSuchFieldError: warningThreshold
[INFO]  at com.google.gwt.dev.javac.JdtCompiler$1.<init>(JdtCompiler.java:505)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.getStandardCompilerOptions(JdtCompiler.java:503)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.getCompilerOptions(JdtCompiler.java:533)
[INFO]  at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:878)   
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:284)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:511)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:434)
[INFO]  at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:420)
[INFO]  at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:495)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:241)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:223)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:139)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:167)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:132)
[INFO]  at com.google.gwt.dev.Compiler$1.run(Compiler.java:99)
[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:106)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.522s
[INFO] Finished at: Fri Sep 05 11:00:36 EDT 2014
[INFO] Final Memory: 15M/222M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:gwt-maven-plugin:2.6.1:compile (default-cli) on project rm-ui: Command [[

然后有一个巨大的类路径,结尾于:

...\tholmes\.m2\repository\com\google\gwt\gwt-dev\2.6.1\gwt-dev-2.6.1.jar             
com.google.gwt.dev.Compiler -logLevel INFO -style OBF -war C:\Users\tholmes\git\rm_ui
\target\rm-ui-0.0.1-SNAPSHOT -localWorkers 4 -XfragmentCount -1 -sourceLevel auto -gen  C:\Users\tholmes\git\rm_ui\target\.generated com.redi2.products.rm.RevenueManager

]]     状态为1失败         在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)         在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)         在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)         在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)         在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)         在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)         在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)         在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:318)         在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153)         在org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)         在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)         在org.apache.maven.cli.MavenCli.main(MavenCli.java:158)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.lang.reflect.Method.invoke(Method.java:606)         在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)         在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)         在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:414)         在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:357)

然后它说:

Caused by: org.codehaus.mojo.gwt.shell.ForkedProcessExecutionException: Command [[

有一个巨大的类路径,最后以......结尾。

... \ tholmes.m2 \ repository \ com \ google \ gwt \ gwt-dev \ 2.6.1 \ gwt-dev-2.6.1.jar com.google.gwt.dev.Compiler     -logLevel INFO-style OBF     -war C:\ Users \ tholmes \ git \ rm_ui \ target \ rm-ui-0.0.1-SNAPSHOT     -localWorkers 4 -XfragmentCount -1     -sourceLevel auto     -gen C:\ Users \ tholmes \ git \ rm_ui \ target.generated com.redi2.products.rm.RevenueManager ]]状态为1失败         在
    org.codehaus.mojo.gwt.shell.AbstractGwtShellMojo $ JavaCommand.execute(AbstractGwtShellMojo.java:485)         在org.codehaus.mojo.gwt.shell.CompileMojo.compile(CompileMojo.java:446)         在org.codehaus.mojo.gwt.shell.CompileMojo.doExecute(CompileMojo.java:351)         在org.codehaus.mojo.gwt.shell.AbstractGwtShellMojo.execute(AbstractGwtShellMojo.java:172)         在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)         在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)         ......还有19个

 [ERROR]
 [ERROR]
 [ERROR] For more information about the errors and possible solutions, please read the  following articles:
 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我花了两天时间,然后三个人试图解决这个问题 这是我们在本地git中的一个项目,我宁愿不必从头开始重新构建一个新的UI项目。

谢谢!

1 个答案:

答案 0 :(得分:5)

  

首先GWT和/或SmartGWT是否支持JDK 1.8,现在只支持1.7?我使用的是jdk 1.7,但最终想尝试1.8。

2.6中的GWT编译器不支持Java 1.8。 git中当前版本的GWT也没有,但是有一个fork维护可以增加支持。极短版本的问题:语言功能本身并不太糟糕(并且所描述的fork已经有了它们),但新的JRE库功能也需要移植(并且合法!不能!)只需从Oracle的代码中复制,这就是诉讼)。

java.lang.NoSuchFieldError: warningThreshold

两个可能的问题都可能导致这种情况,两者都与类路径有关。

第一个是gwt版本问题 - 你在类路径上以某种方式混合和匹配GWT的版本。仔细查看(但不包括在这个问题中,所以我不能给你更多细节),你可能会在列出的地方找到额外的GWT 2.5或2.4副本。我怀疑这是最有可能的,因为它往往特定于你的GWT升级。

另一种选择是你的类路径上有另一个(很可能是较旧的)JDT(因为GWT 2.6更新为新的JDT版本)。请参阅相关问题GWT + Spring hosted mode not working - 这是关于开发模式,但它是相同的想法。这似乎不太可能,因为你应该使用相同的类路径,无论是在eclipse还是maven,但仍然可能。