Java Tycho引发EclipseIDE没有的错误:无法引用非最终变量

Java Tycho引发EclipseIDE没有的错误:无法引用非最终变量,java,eclipse,maven,tycho,Java,Eclipse,Maven,Tycho,,一个用于构建Eclipse插件的Maven插件,引发了一个Eclipse IDE没有遇到的编译错误:无法在另一个方法中定义的内部类中引用非最终变量urlString 修复非常简单,只需添加一个final 然而,我想知道为什么Tycho的编译不同于EclipseIDE? 两者的Java版本都设置为1.6(参见中的) 有关项目设置的详细信息: .project和.classpath是 .classpath中有,我可以在Eclipse中看到它作为“JRE系统库[JavaSe-1.6]”文件夹 声

,一个用于构建Eclipse插件的Maven插件,引发了一个Eclipse IDE没有遇到的编译错误:无法在另一个方法中定义的内部类中引用非最终变量urlString

修复非常简单,只需添加一个
final

然而,我想知道为什么Tycho的编译不同于EclipseIDE? 两者的Java版本都设置为1.6(参见中的)

有关项目设置的详细信息:

  • .project和.classpath是
  • .classpath中有,我可以在Eclipse中看到它作为“JRE系统库[JavaSe-1.6]”文件夹
  • 声明
    Bundle-RequiredExecutionEnvironment:JavaSE-1.6

然而,我确实在JVM 8上运行过,我的工作区默认值为1.8,我怀疑您是否已将Eclipse配置为针对Java 6构建。对我来说,JDT允许访问闭包中的非最终变量,只要我将JDK符合性级别设置为1.8。显然,您在Eclipse中的编译器设置是错误的


显然,如果您必须手动保持Eclipse和Tycho设置的同步,那么很容易出错。因此,建议通过执行环境为这两种配置编译器设置:

  • 在所有插件清单中声明
    Bundle-RequiredExecutionEnvironment:JavaSE-1.6
    。(PDE不支持配置继承,因此很遗憾,您必须在每个插件项目中都这样做。)
  • 如果您的项目签入了
    .project
    文件,请确保所有项目都启用了项目特定的编译器设置,并且选中了Java生成路径上的“从执行环境使用遵从性”选项。此设置存储在
    .settings/org.eclipse.jdt.core.prefs
    中,因此还需要签入此文件。如果没有签入
    .project
    文件,但使用m2eclipse导入项目,则可以省略此步骤
  • 删除任何
    tycho编译器插件
    目标
    配置,以及
    目标平台配置
    执行环境配置(如果存在)。这样可以确保使用包清单中的执行环境来确定Tycho中的编译器设置。(有关详细信息,请参阅配置)

  • 我怀疑您是否已将Eclipse配置为针对Java6构建。对我来说,JDT允许访问闭包中的非最终变量,只要我将JDK符合性级别设置为1.8。显然,您在Eclipse中的编译器设置是错误的


    显然,如果您必须手动保持Eclipse和Tycho设置的同步,那么很容易出错。因此,建议通过执行环境为这两种配置编译器设置:

  • 在所有插件清单中声明
    Bundle-RequiredExecutionEnvironment:JavaSE-1.6
    。(PDE不支持配置继承,因此很遗憾,您必须在每个插件项目中都这样做。)
  • 如果您的项目签入了
    .project
    文件,请确保所有项目都启用了项目特定的编译器设置,并且选中了Java生成路径上的“从执行环境使用遵从性”选项。此设置存储在
    .settings/org.eclipse.jdt.core.prefs
    中,因此还需要签入此文件。如果没有签入
    .project
    文件,但使用m2eclipse导入项目,则可以省略此步骤
  • 删除任何
    tycho编译器插件
    目标
    配置,以及
    目标平台配置
    执行环境配置(如果存在)。这样可以确保使用包清单中的执行环境来确定Tycho中的编译器设置。(有关详细信息,请参阅配置)

  • 我怀疑您是否已将Eclipse配置为针对Java6构建。对我来说,JDT允许访问闭包中的非最终变量,只要我将JDK符合性级别设置为1.8。显然,您在Eclipse中的编译器设置是错误的


    显然,如果您必须手动保持Eclipse和Tycho设置的同步,那么很容易出错。因此,建议通过执行环境为这两种配置编译器设置:

  • 在所有插件清单中声明
    Bundle-RequiredExecutionEnvironment:JavaSE-1.6
    。(PDE不支持配置继承,因此很遗憾,您必须在每个插件项目中都这样做。)
  • 如果您的项目签入了
    .project
    文件,请确保所有项目都启用了项目特定的编译器设置,并且选中了Java生成路径上的“从执行环境使用遵从性”选项。此设置存储在
    .settings/org.eclipse.jdt.core.prefs
    中,因此还需要签入此文件。如果没有签入
    .project
    文件,但使用m2eclipse导入项目,则可以省略此步骤
  • 删除任何
    tycho编译器插件
    目标
    配置,以及
    目标平台配置
    执行环境配置(如果存在)。这样可以确保使用包清单中的执行环境来确定Tycho中的编译器设置。(有关详细信息,请参阅配置)

  • 我怀疑您是否已将Eclipse配置为针对Java6构建。对我来说,JDT允许访问闭包中的非最终变量,只要我将JDK符合性级别设置为1.8。显然,您在Eclipse中的编译器设置是错误的


    显然,如果您必须手动保持Eclipse和Tycho设置的同步,那么很容易出错。因此,建议通过执行e为这两者配置编译器设置
    [ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:0.19.0:compile (default-compile) on project org.nodeclipse.ui: Compilation failure: Compilation failure:
    [ERROR] D:\Workspaces\Nodeclipse-DEV\nodeclipse-1\org.nodeclipse.ui\src\org\nodeclipse\ui\preferences\NodePreferencePage.java:[93]
    [ERROR] URL url = new URL(urlString);
    [ERROR] ^^^^^^^^^
    [ERROR] Cannot refer to a non-final variable urlString inside an inner class defined in a different method
    [ERROR] 1 problem (1 error)