作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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)
项目设置详细信息:
Bundle-RequiredExecutionEnvironment:JavaSE-1.6
但是我确实在 JVM 8 上运行,并且工作空间默认为 1.8
最佳答案
我怀疑您是否已将 Eclipse 配置为针对 Java 6 进行构建。对我来说,当且仅当我将 JDK 合规级别设置为 1.8 时,JDT 才允许访问闭包中的非最终变量。所以您在 Eclipse 中的编译器设置显然是错误的。
<小时/>显然,如果您必须手动保持 Eclipse 和第谷设置同步,则很容易出错。因此,建议通过执行环境配置两者的编译器设置:
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
。 (PDE 不支持配置继承,因此不幸的是您必须在每个插件项目中执行此操作。).project
文件,请确保所有项目都启用了项目特定的编译器设置,并且选项使用 Java 构建上执行环境的合规性路径已选择。该设置存储在.settings/org.eclipse.jdt.core.prefs
中,因此也需要 checkin 该文件。如果没有,可以省略此步骤。 checkin 项目
文件,但使用 m2eclipse 导入您的项目。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/
我是一名优秀的程序员,十分优秀!