【问题标题】:@CrossOrigin annotation stops compilation in IntelliJ@CrossOrigin 注释在 IntelliJ 中停止编译
【发布时间】:2016-02-28 18:09:13
【问题描述】:

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

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    尝试使用 JDK 1.7.0_80。我在使用 JDK 1.7.0_79 时遇到了这个问题。不过在 1.7.0_80 上工作。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题...从验证中排除它对我的情况没有帮助。当我使用 mvn 从 cmd 编译它时,一切正常,但从 intellij 编译时却不行。 我的 intellij 设置强制使用 java jdk 1.7(项目需要)。当我将其设置为 1.8 时,我没有任何问题。我想这是 javac 7 中的一个错误(参见here)。

      我遇到了 javac 的(已知并在 1.8 中解决)问题 使用需要复杂的静态最终字段的注释失败 初始化。失败在最新的 1.7 中表现出来

      【讨论】:

        【解决方案3】:

        在安装了 oracle jdk 1.7.0_76 的 travis ci 中部署我的应用程序时,我遇到了同样的问题。我强制更新了 jdk7,然后升级到 jdk 1.7.0_80。 @CrossOrigin 注释在那之后没有抱怨。

        【讨论】:

          【解决方案4】:

          今天遇到这个问题后,我也浏览了互联网,找不到直接的答案。在我的情况下,使用更高版本的 Java 是不可能的,因为项目要部署到 JDK 6。但是最后我找到了解决方案,希望对其他人有所帮助。

          关键是Java向后兼容

          这就是答案:)。您可以使用较高的JDK 版本,例如1.7 or 1.8 来编译您的项目,并使用-target 选项交叉编译到较低的版本。

          -目标版本

          生成以指定 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,所以我只需要更改 POM 中的 &lt;java.version&gt; 属性即可。我仍在使用 Java 8,使用最新的 Maven,但是 maven 正在交叉编译到 JDK6。

          【讨论】:

            【解决方案5】:

            您可以通过右键单击将错误排除在通过 IntelliJ 进行的验证中,然后它应该编译。

            编辑:似乎更新 JDK 是适当的修复,我的建议旨在快速绕过该问题,并且更像是一个创可贴修复,因为验证错误不应该影响任何事情。有关她的解释,请参阅 Nikki 的回答。

            【讨论】:

            猜你喜欢
            • 2018-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-23
            • 1970-01-01
            • 2020-10-09
            • 2019-09-18
            相关资源
            最近更新 更多