当我实现接口方法时,Eclipse将添加@Override批注。Eclipse似乎对此没有任何问题。而且,来自Cruise Control的自动化构建过程似乎对此没有问题。但是,当我从命令行构建并运行Javac的ant时,出现以下错误:
[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass [javac] @Override [javac] ^ [javac] 1 error
Eclipse在Java 1.6下运行。Cruise Control正在运行Java 1.5。无论我使用哪个Java版本,我的蚂蚁构建都会失败。
该@Override注释规范用Java 1.6改变。在Java 1.5中,编译器不允许@Override在已实现的接口方法上进行批注,但在1.6中则允许。我找到的第一个搜索结果是此处的博客文章。。它没有很好的记录,但是确实发生了变化。
Eclipse之所以添加它,是因为您的Eclipse设置为符合1.6。您应该尝试将构建和Eclipse环境保持在同一Java版本上。我不清楚您是否指定Cruise Control正在运行Java 5,是否正在使用单独的JDK6进行编译。
与上述1.5和1.6@Override注释规则分开,请记住Eclipse具有自己的编译器实现(不是javac),并且偶尔会有不同的行为。每当在Eclipse中编译某些东西(而不是Ant或Maven)时,您都需要找到一种使两个编译器都满意的方法。