提问者:小点点

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


Eclipse Tycho是一个用于构建Eclipse插件的Maven插件,它引发了一个Eclipse IDE没有的编译错误:不能引用在不同方法中定义的内部类中的非最终变量urlString

[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)

修复是微不足道的,只需添加一个最终

然而,我想知道为什么使用Tycho编译与Eclipse IDE不同?两者都将Java版本设置为1.6(参见pom. xml)

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

  • .project和.classpath已提交
  • .classpath有JavaSE-1.6,我可以在Eclipse中看到它作为“JRE系统库[JavaSE-1.6]”文件夹
  • META-INF/MANIFEST.MF声明<code>Bundle RequiredExecutionEnvironment:JavaSE-1.6</code>

但是,我确实在JVM 8上运行,并且我的工作区默认为1.8


共1个答案

匿名用户

我怀疑您是否已将Eclipse配置为针对Java6进行构建。对我来说,当且仅当我将JDK合规级别设置为1.8时,JDT才允许访问闭包中的非最终变量。因此,您显然在Eclipse中使用了错误的编译器设置。

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

    < li >在所有插件清单中声明< code > Bundle-required execution environment:JavaSE-1.6 。(PDE不支持配置继承,所以不幸的是,您必须在每个插件项目中这样做。) < li >如果您的项目具有< code >。签入项目文件时,请确保所有项目都启用了特定于项目的编译器设置,并且选择了Java构建路径上的“从执行环境使用符合性”选项。此设置存储在< code >中。settings/org . eclipse . JDT . core . prefs ,所以这个文件也需要签入。如果没有< code >,可以省略这一步。签入项目文件,但是使用m2eclipse导入您的项目。 < li >删除任何< code>tycho编译器插件 源代码

相关问题