@ 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.