@CrossOrigin注释在IntelliJ中停止编译

时间:2015-11-25 19:46:45

标签: java spring maven intellij-idea spring-boot

当我从命令行使用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有关。但是,这个问题从未得到真正解决。

有什么建议吗?

5 个答案:

答案 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的答案。