当我从命令行使用maven编译包含Spring @org.springframework.web.bind.annotation.CrossOrigin
注释的任何类时,它编译得很好。但是,当我尝试使用IntelliJ Idea 15编译相同的代码时,我得到了这个奇怪的错误:
[ERROR] /Users/gregederer/devewx2/geoengine/src/main/java/geoengine/controller/rest/TimeSeriesController.java:[34,1] annotation org.springframework.web.bind.annotation.CrossOrigin is missing value for the attribute <clinit>
这可能与https://community.oracle.com/message/4827054有关。但是,这个问题从未得到真正解决。
有什么建议吗?
答案 0 :(得分:13)
尝试使用JDK 1.7.0_80。我使用JDK 1.7.0_79遇到了这个问题。虽然工作在1.7.0_80。
答案 1 :(得分:1)
我遇到了同样的问题......从验证中排除它对我的情况没有帮助。当我用mvn从cmd编译它时,一切正常,但是从intellij开始,它没有。 我的intellij设置强制使用java jdk 1.7(项目需要)。当我将它设置为1.8时,我没有问题。我想这是javac 7中的一个错误(见here)。
我遇到了javac的问题(在1.8中已知并已解决) 在静态最终字段需要复杂的注释上失败 初始化。失败表现在最新的1.7
答案 2 :(得分:0)
我在安装了oracle jdk 1.7.0_76的travis ci中部署我的应用程序时遇到了同样的问题。我强制更新jdk7,然后升级到jdk 1.7.0_80。 @CrossOrigin注释后没有抱怨。
答案 3 :(得分:0)
今天面对这个问题后,我也浏览了互联网,无法找到答案。在我的情况下,使用更高的Java版本是不可能的,因为项目将被部署到JDK 6.但最终我找到了解决方案,希望它能帮助其他人。
关键点是 Java向后兼容。
那是答案:)。您可以使用更高JDK
版本(如1.7 or 1.8
)来编译项目,并使用-target
选项交叉编译为更低版本。
-target version
生成以指定版本的VM为目标的类文件。类文件将在指定的目标和更高版本上运行,但不会在早期版本的VM上运行。有效目标是1.1,1.2,1.3,1.4,1.5(也是5),1.6(也是6)和1.7(也是7)。
-target的默认值取决于-source:
的值如果未指定-source,则-target的值为1.7
如果-source为1.2,则-target的值为1.4
如果-source为1.3,则-target的值为1.4
如果-source为1.5,则-target的值为1.7
如果-source为1.6,则-target的值为1.7
对于-source的所有其他值,-target的值是-source的值。
参考:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
我正在使用Maven,因此我只需更改<java.version>
中的POM
属性即可。我还在使用Java 8,最新的Maven,但maven正在交叉编译为JDK6。
答案 4 :(得分:-2)
您可以通过右键单击它来排除错误包含在验证中,然后编译它。
编辑:似乎更新JDK是适当的修复,我的建议是为了快速绕过这个问题,更多的是一个绑定修复,因为验证错误不应该影响任何东西。有关她的解释,请参阅Nikki的答案。