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:WorkspacesNodeclipse-DEVnodeclipse-1org.nodeclipse.uisrcorgnodeclipseuipreferencesNodePreferencePage.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)

修复很简单,只需添加一个final即可。

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

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

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

然而,我确实运行了JVM 8,并且我的工作区默认为1.8

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


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

  1. 在所有插件清单中声明Bundle-RequiredExecutionEnvironment: JavaSE-1.6。(PDE不支持配置继承,所以不幸的是,在每个插件项目中都必须这样做。)
  2. 如果您的项目签入了.project文件,请确保所有项目都启用了特定于项目的编译器设置,并且选择了选项在Java Build Path上使用来自执行环境的符合性。此设置存储在.settings/org.eclipse.jdt.core.prefs中,因此也需要签入此文件。如果没有签入.project文件,但使用m2eclipse导入项目,则可以省略此步骤
  3. 移除任何tycho-compiler-plugin source&target配置和target-platform-configuration executionEnvironment配置(如果存在)。这样可以确保使用bundle清单中的执行环境来确定Tycho中的编译器设置。(有关详细信息,请参阅第谷执行环境配置)

最新更新