gpt4 book ai didi

java - Tycho 引发 Eclipse IDE 不存在的错误 : Cannot refer to a non-final variable

转载 作者:行者123 更新时间:2023-12-01 22:41:32 27 4
gpt4 key购买 nike

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)

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

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

项目设置详细信息:

  • .project 和 .classpath 是 committed
  • .classpath 有 JavaSE-1.6我可以在 Eclipse 中看到它作为“JRE System Library [JavaSe-1.6]”文件夹。
  • META-INF/MANIFEST.MF声明Bundle-RequiredExecutionEnvironment:JavaSE-1.6

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

最佳答案

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

<小时/>

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

  1. 在所有插件 list 中声明 Bundle-RequiredExecutionEnvironment: JavaSE-1.6。 (PDE 不支持配置继承,因此不幸的是您必须在每个插件项目中执行此操作。)
  2. 如果您的项目 checkin 了 .project 文件,请确保所有项目都启用了项目特定的编译器设置,并且选项使用 Java 构建上执行环境的合规性路径已选择。该设置存储在.settings/org.eclipse.jdt.core.prefs中,因此也需要 checkin 该文件。如果没有,可以省略此步骤。 checkin 项目 文件,但使用 m2eclipse 导入您的项目。
  3. 删除任何 tycho-compiler-plugin source&target 配置以及 target-platform-configuration executionEnvironment 配置(如果存在)。这可确保使用捆绑 list 中的执行环境来确定第谷中的编译器设置。 (详细信息请参阅 Tycho Execution Environments 配置)

关于java - Tycho 引发 Eclipse IDE 不存在的错误 : Cannot refer to a non-final variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26055838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com