首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 7源代码级别编译GWT 2.6.1

在Java 7源代码级别编译GWT 2.6.1
EN

Stack Overflow用户
提问于 2014-05-30 15:22:31
回答 3查看 3.4K关注 0票数 5

我最近将我的GWT项目更新为2.6.1,并开始使用Java 7语法,因为2.6现在支持Java 7。

但是,当我试图编译时,我会收到编译器错误,例如

[ERROR] Line 42: '<>' operator is not allowed for source level below 1.7

全输出

代码语言:javascript
复制
Compiling module com.Project
   Validating units:
      Ignored 85 units with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
   Computing all possible rebind results for 'com.google.gwt.useragent.client.UserAgentAsserter'
      Rebinding com.google.gwt.useragent.client.UserAgentAsserter
         Checking rule <generate-with class='com.google.gwt.editor.rebind.SimpleBeanEditorDriverGenerator'/>
            [WARN] Detected warnings related to 'com.google.gwt.editor.client.SimpleBeanEditorDriver'.   Are validation-api-<version>.jar and validation-api-<version>-sources.jar on the classpath?
            Specify -logLevel DEBUG to see all errors.
            [WARN] Unknown type 'com.google.gwt.editor.client.SimpleBeanEditorDriver' specified in deferred binding rule
   [ERROR] Errors in 'file:/C:/workspace/Project/src/com/project/ProjectFile.java'
      [ERROR] Line 42: '<>' operator is not allowed for source level below 1.7
   [ERROR] Errors in 'file:/C:/workspace/Project/src/com/project/AnotherProjectFile.java'
      [ERROR] Line 188: Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
C:\workspace\Project\build.xml:51: Java returned: 1
    at org.apache.tools.ant.taskdefs.Java.execute(Java.java:111)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    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)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.Main.start(Main.java:180)
    at org.apache.tools.ant.Main.main(Main.java:268)
    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)
    at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
C:\workspace\Project\build.xml:51: Java returned: 1
    at org.apache.tools.ant.taskdefs.Java.execute(Java.java:111)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    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)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.Main.start(Main.java:180)
    at org.apache.tools.ant.Main.main(Main.java:268)
    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)
    at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
C:\workspace\Project\build.xml:51: Java returned: 1
    at org.apache.tools.ant.taskdefs.Java.execute(Java.java:111)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    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)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.Main.start(Main.java:180)
    at org.apache.tools.ant.Main.main(Main.java:268)
    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)
    at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)

如何将GWT编译器指定为目标1.7?我当时的印象是,它会在默认情况下做到这一点,但我想并非如此。我尝试过清理这个项目,包括删除gwt-unitCache目录,但是没有效果。

这里是我的Ant编译目标。

代码语言:javascript
复制
<target name="compile" depends="prepare">
    <javac includeantruntime="false"
           debug="on"
           debuglevel="lines,vars,source"
           srcdir="${src.dir}"
           destdir="${build.dir}"
           source="7"
           target="7">
        <classpath refid="project.classpath"/>
    </javac>
</target>

<target name="gwt-compile" depends="compile">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
        <classpath>
            <!-- src dir is added to ensure the module.xml file(s) are on the classpath -->
            <pathelement location="${src.dir}"/>
            <pathelement location="${build.dir}"/>
            <path refid="project.classpath"/>
        </classpath>
        <jvmarg value="-Xmx256M"/>
        <arg value="-sourceLevel"/><arg value="7"/>
        <arg value="${gwt.module.name}"/>
    </java>
</target>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-04 11:35:42

最终,解决方案是zpon和Thomas的答案的结合。

首先,删除gwt-unitCache目录。

然后,在javac Ant任务中,显式地指定源级别

代码语言:javascript
复制
<javac includeantruntime="false"
               debug="on"
               debuglevel="lines,vars,source"
               srcdir="${src.dir}"
               destdir="${build.dir}"
               source="7"
               target="7">
   <classpath refid="project.classpath"/>
</javac>

还指定GWT编译器的源级别。

代码语言:javascript
复制
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
    <classpath>
        <pathelement location="${src.dir}"/>
        <pathelement location="${build.dir}"/>
        <path refid="project.classpath"/>
    </classpath>
    <jvmarg value="-Xmx256M"/>
    <arg value="-sourceLevel"/><arg value="7"/>
    <arg value="${gwt.module.name}"/>
</java>
票数 2
EN

Stack Overflow用户

发布于 2014-05-30 21:43:06

GWT (以及SuperDevMode的CodeServer)有一个-sourceLevel参数,可以用来指定语言级别,类似于javac-source参数。

-sourceLevel的默认值取决于当前的JVM,因此如果您使用JDK1.7,它应该默认为Java7。

明确地将-sourceLevel 7 (或1.7)传递给GWT、将-source 7 (或1.7)传递给javac (在<javac> Ant任务中使用source="7" )是一个很好的实践。

票数 4
EN

Stack Overflow用户

发布于 2014-06-04 06:52:18

我们只花了两天时间寻找一个类似的bug,结果发现它是由gwt代码的部分编译和错误版本的java (1.6)引起的。这在gwt-unitCache中留下了一些数据,在某种程度上迫使gwt编译器继续期望代码为1.6 (因此是菱形操作符警告),即使java版本更改为1.7。通过删除gwt-unitCache解决了这个问题。

我知道OP说他已经尝试过了,但这并没有解决他的问题,但我想提到它,因为它可能会帮助其他有类似问题的人。此外,这还可能表明,如果OP正在使用其他预编译的gwt代码,这可能会影响gwt编译器使用哪个版本的java。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23958028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档