@ CrossOrigin аннотация останавливает компиляцию в IntelliJ

когда я компилирую любой класс, содержащий Spring @org.springframework.web.bind.annotation.CrossOrigin аннотация используя maven из командной строки, он компилируется просто отлично. Но, когда я пытаюсь скомпилировать тот же код с помощью 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 ответов


вы можете исключить ошибку из включения в проверку через IntelliJ, щелкнув ее правой кнопкой мыши, а затем она должна компилироваться.

Edit: похоже, обновление JDK-это подходящее исправление, мое предложение было предназначено для быстрого обхода проблемы и было больше похоже на исправление bandaid, поскольку ошибка проверки не должна была повлиять ни на что. См. ответ Никки для ее объяснения.


попробуйте использовать JDK 1.7.0_80. Я столкнулся с этой проблемой с помощью JDK 1.7.0_79. Хотя работал на 1.7.0_80.


У меня такая же проблема... Исключение его из проверки не помогло в моем случае. Когда я компилирую его из cmd с mvn, все работает нормально, но из intellij это не так. Мои настройки intellij вынудили использовать java jdk 1.7 (необходимый для проекта). Когда я установить его на 1.8, у меня нет проблем. Я полагаю, что это ошибка в javac 7 (см. здесь).

Я столкнулся с (известной и разрешенной в 1.8) проблемой с javac ошибка в аннотациях с статические конечные поля, требующие сложных инициализация. Сбой проявляется на последнем 1.7


У меня была та же проблема при развертывании моего приложения в travis ci, который установил oracle JDK 1.7.0_76. Я принудительно обновил jdk7, затем обновился до jdk 1.7.0_80. После этого аннотация @CrossOrigin не жаловалась.


столкнувшись с этой проблемой сегодня, я также просмотрел Интернет и не смог найти прямого ответа. В моем случае использование более высокой версии Java было невозможно, потому что проект должен был быть развернут в JDK 6. Однако в конце концов я нашел решение, надеюсь, оно поможет кому-то другому.

ключевой момент-это Java обратно совместим.

вот и ответ :) . Вы можете использовать более высокий JDK версия типа 1.7 or 1.8 скомпилировать проект и использовать -target возможность перекрестной компиляции в более низкую версию.

-целевой версии

создание файлов классов, предназначенных для указанной версии виртуальной машины. Файлы классов будут выполняться в указанной целевой и более поздних версиях, но не в более ранних версиях виртуальной машины. Допустимые цели 1.1, 1.2, 1.3, 1.4, 1.5 (также 5), 1.6 (также 6), и 1.7 (также 7).

значение по умолчанию для-target зависит от значения-source:

если-source не указан, то ценность -цель-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.

Ref: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

я использовал Maven, поэтому мне просто нужно было изменить <java.version> собственность в POM и это все. Я все еще использовал Java 8, с последним Maven, однако maven был перекрестной компиляцией в JDK6.