У меня есть ошибки сборки с m2eclipse, но не с maven2 в командной строке - неправильно ли настроен мой m2eclipse?

Я установил m2eclipse для создания Java-проекта в Eclipse.

Я импортировал проект следующим образом:

Import->
Maven->
Existing Maven Projects->
Import Maven Projects->
- Select root directory
- Select pom file
- Click Finish

Чтобы убедиться, что m2eclipse действительно создает проект, я удалил целевой каталог и убедился, что m2eclipse воссоздает его, и так оно и было. Но в отличие от версии maven для командной строки, в которой все построено идеально, m2eclipse оставляет большое количество ошибок сборки в исходном коде.

Возможно ли, что я неправильно настроил m2eclipse? Как мне это проверить?

Это ссылка github на проект, который я пытаюсь создать. Я получаю ошибки сборки @Override по адресу эта строка. Он говорит: «Метод createNewToken должен переопределить метод суперкласса».


person Chris Collins    schedule 21.08.2010    source источник
comment
Опубликуйте, пожалуйста, несколько примеров ошибок (кстати, m2eclipse по умолчанию использует встроенную версию maven 3, то есть, скорее всего, это не та же версия, что и у вас в командной строке). Но опубликуйте ошибки, мы не медиумы :)   -  person Pascal Thivent    schedule 21.08.2010
comment
Вы можете активировать отладочный вывод в настройках maven, чтобы подробно узнать, что происходит. Я предлагаю также попробовать просто обновить зависимости (щелкните правой кнопкой мыши проект- ›maven-› обновить зависимости iirc), возможно, это поможет. Также как вы строите проект внутри eclipse? Вы явно вызываете цель / фазу maven? Если да, опубликуйте конфигурацию запуска.   -  person Raoul Duke    schedule 21.08.2010
comment
На самом деле, насколько я могу судить, все ошибки говорят об удалении аннотации @Override - ›Метод x должен переопределять метод суперкласса. Я попробовал (щелкните правой кнопкой мыши проект- ›maven-› обновить зависимости), но это не помогло. Что касается вопроса, как я создаю проект, я просто импортировал проект, используя файл pom, и предполагал, что он будет построен автоматически. Фактически, в консоли eclipse написано: Maven Builder: AUTO_BUILD.   -  person Chris Collins    schedule 21.08.2010
comment
@Raoul: Я включил вывод отладки maven, но информации о проблемах сборки там нет.   -  person Chris Collins    schedule 21.08.2010
comment
Покажите, пожалуйста, класс, позволяющий воспроизвести проблему (и его суперкласс / интерфейс).   -  person Pascal Thivent    schedule 21.08.2010
comment
Это проект, который я пытаюсь создать: github.com/tleese22/google-app -engine-jappstart. Я получаю сообщение об ошибке сборки @Override в этой строке: github.com/tleese22/google-app-engine-jappstart/blob/master/src/   -  person Chris Collins    schedule 21.08.2010
comment
@Chris - Я зарегистрировал новый файл pom.xml с исходным уровнем 1.6.   -  person Taylor Leese    schedule 23.08.2010


Ответы (3)


Обновление: проблема такая же, как и описанная в Ошибки 'Must Override a Superclass Method' после импорта проекта в Eclipse, и вот что говорится в принятом ответе:

По умолчанию для Eclipse используется Java 1.5, и у вас есть классы, реализующие методы интерфейса (которые в Java 1.6 могут быть аннотированы с помощью @Override, но в Java 1.5 могут применяться только к методам, переопределяющим метод суперкласса).

Изменение уровня компилятора на Java 1.6 устранит проблему. Для этого измените конфигурацию плагина компилятора:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

И обновите конфигурацию проекта (щелкните правой кнопкой мыши по проекту, затем Maven V Update Project Configuration) действительно решает проблему в Eclipse.

Или придерживайтесь 1.5, но удалите проблемные аннотации @Override.

Я не знаю, как у Тейлора все работает с уровнем компилятора Java 1.5. И я предполагаю, что проект не будет строиться из командной строки с JDK 5.


Но в отличие от версии maven для командной строки, в которой все построено идеально, m2eclipse оставляет большое количество ошибок сборки в исходном коде.

Трудно сказать, что именно происходит, не видя этих «ошибок» (действительно ли это ошибки?). Пожалуйста, предоставьте несколько следов.

Возможно ли, что я неправильно настроил m2eclipse? Как мне это проверить?

Одно отличие состоит в том, что m2eclipse по умолчанию использует встроенную версию Maven 3, которая, вероятно, не та версия, которую вы используете в командной строке. Вы можете изменить это с помощью Window V Preferences V Maven V Installation (и добавить свою собственную установку):

alt text

Но хотя я бы рекомендовал использовать ту же версию в Eclipse, что и в командной строке, это, скорее всего, не является основной причиной проблемы, сборки Maven 2 должны работать на Maven 3 без проблем.

person Pascal Thivent    schedule 21.08.2010
comment
Я попытался переключиться на установку maven2, но, как вы и подозреваете, это не повлияло на ошибки сборки. Но спасибо за скриншот. Я не знал, что изменить установку по умолчанию было так просто. - person Chris Collins; 21.08.2010
comment
Похоже, Рауль испытывает те же проблемы с этим кодом. Я решил, что это просто то, чем я занимаюсь. - person Chris Collins; 22.08.2010
comment
@Raoul Пожалуйста, дважды проверьте свои утверждения, потому что это работает для меня, и я на 200% уверен в том, что говорю. - person Pascal Thivent; 22.08.2010
comment
Теперь он работает отлично. Некоторые из проблем Content Assist, с которыми я сталкивался ранее, также были устранены. - person Chris Collins; 22.08.2010

Я проверил код. У меня точно такая же проблема. Код вроде просто сломан.

Изменить: это определенно так. Посмотрите на класс com.jappstart.service.auth.UserDetailsServiceImpl. Он хочет переопределить метод public final UserDetails loadUserByUsername(final String username), но этот метод не существует в интерфейсе, который реализует класс, и не имеет суперкласса.

Изменить: Хорошо, это не объясняет, почему он строится с автономным maven. У меня это тоже работает. Очень странно. Похоже, что что-то происходит со сборкой, что не работает с m2eclipse.

Изменить: я почти уверен, что код работает, потому что байт-код изменен плагином datanucleus. Когда я запускаю проект как сборку maven (щелкните правой кнопкой мыши-> Выполнить-> пакет maven), он успешно создает войну с m2eclipse. Итак, я предполагаю, что проблема в m2eclipse Maven Builder.

person Raoul Duke    schedule 21.08.2010
comment
Спасибо за проверку кода. Я рад, что вы смогли убедиться, что он работает автономно с maven, но не с m2eclipse. Но, основываясь на совете Паскаля, я установил m2eclipse для использования моей автономной установки maven. Так что это делает еще более загадочным, почему должна быть разница. - person Chris Collins; 22.08.2010
comment
Я подозреваю, что это связано с плагином datanucleus. Этот плагин, похоже, выполняет некоторые манипуляции с байт-кодом, которые могут объяснить, что сломанный код может быть скомпилирован. Однако я не понимаю, почему это не работает с m2eclipse. - person Raoul Duke; 22.08.2010

Ошибки переопределения появятся, если eclipse настроен на использование java 1.5 вместо 1.6. Проверить свойства проекта.

person Taylor Leese    schedule 21.08.2010
comment
@ Крис Ты читал мой ответ, Крис? Я предоставил правильное решение (настройка maven-compiler-plugin для 1.6 IN pom.xml). Это правильный путь, m2eclipse получает настройки из файла pom.xml. И это то, что должен сделать Тейлор, не нужно менять настройки IDE после импорта. - person Pascal Thivent; 22.08.2010
comment
Конечно, я изменю POM на список 1.6, когда у меня будет возможность (вероятно, завтра вечером). Мои настройки проекта Eclipse были на 1.6, поэтому я этого не замечал. - person Taylor Leese; 22.08.2010