2009-12-28 4 views
1

Я использую Eclipse 3.51, Maven 2.0.9, Java 1.4, с плагином Maven Eclipse 2.7 с WTP 2.0 (не m2Eclipse).Проблемы с плагином Maven Eclipse и classpath в Eclipse

У меня есть проект с плоским мультимодулем, который настроен следующим образом (модуль Parent с родительским pom, модуль A и B зависит от C).

Импорт четырех модулей в первый раз покажет ошибки компиляции, как и ожидалось, так как я не запускал плагин eclipse. Когда мой локальный репозиторий пуст, запуск eclipse clean разрешит все ошибки компиляции и зависимости в моей локальной рабочей области.

Если бы я должен был внести некоторые незначительные изменения кода в модуль B и снова запустить плагин eclipse, ошибки компиляции появятся в модулях A и B. Составьте ошибки в отношении классов, которые не могут быть найдены. Его аналогичный модуль C больше не находится в пути к классам для A и B.

Я смотрю файл .classpath и определенно просматриваю нужные модули в рабочей области Eclipse.

Если я удалю репозиторий maven и снова затмлю eclipse, ошибки компиляции относительно неразрешенных классов будут исправлены. Кроме того, если я запустил команду eclpse clean с флагом useProjectReferences в false, а затем снова запустил ее с помощью true, Eclipse перестроит мое рабочее пространство, и ошибки исчезнут.

Что происходит?

ответ

1

Импорт четырех модулей в первый раз покажет ошибки компиляции, как и ожидалось, так как я не запускал плагин eclipse. Когда мой локальный репозиторий пуст, запуск eclipse clean разрешит все ошибки компиляции и зависимости в моей локальной рабочей области.

Пока все хорошо. Только один вопрос: затмение чистое, вы не имеете в виду eclipse:clean, но очищаете под Eclipse, не так ли?

Если я должен был внести некоторые незначительные изменения кода в модуль B и снова запустить плагин eclipse, ошибки компиляции появятся в модулях A и B. Составьте ошибки в отношении классов, которые не могут быть найдены. Его аналогичный модуль C больше не находится в пути к классам для A и B.

Я не уверен, почему вы запускаете плагин maven eclipse после того, как незначительный код изменится на модуль B, но, скажем, вам нужно, например, потому что вы добавили зависимость (было бы полезно упомянуть цель, которую вы запускаете, но неважно). При использовании плагина maven eclipse с сборкой нескольких проектов он будет использовать ссылки на проекты по умолчанию на уровне Eclipse (т. Е. A и B зависят от скомпилированных классов C, а не от C JAR). И поскольку Maven и Eclipse используют одну и ту же папку target/classes, чистая или компиляция на уровне Maven может запутать Eclipse. Он больше не видит скомпилированные классы и не будет компилировать их самостоятельно (потому что это изменение не произошло в Eclipse). В этом случае очистка или восстановление Eclipse (то есть на уровне Eclipse) должно решить проблему.

Я смотрю файл .classpath и определенно просматриваю нужные модули в рабочей области Eclipse.

Да, это не проблема. Проблема возникает из-за того, что Eclipse и Maven используют одну и ту же папку для классов компиляции.

Если я удалю репозиторий maven и снова затмлю затмение, ошибки компиляции относительно неразрешенных классов будут исправлены.

Вам действительно не нужно это делать, и я не понимаю, что такое репозиторий maven, если вы используете ссылки на проекты. Выполнение очистки и/или восстановления всех проектов под Eclipse должно устранить проблему.

Кроме того, если я запускаю чистую команду eclpse с флагом useProjectReferences к ложным, а затем снова запустить его с истинным, Eclipse будет восстанавливать свое рабочее место и ошибки исчезнут.

Вы используете ссылки на проект или нет? Опять же, в следующий раз, возможно, вы получите свою конфигурацию плагина в своем вопросе, это может помочь. Во всяком случае, вам не нужно касаться этого между сборками. Решите, хотите ли вы использовать ссылки на проекты (я думаю, что это более удобно, без них вам понадобится mvn install C, чтобы сделать изменения доступными для A и B) и придерживаться этой конфигурации. После сборки mvn восстановление рабочей области Eclipse должно быть достаточно.

PS: Обратите внимание, что вы можете настроить плагин maven eclipse для использования пользовательского buildOutputDirectory, например target/eclipse-classes, но у этого есть другие недостатки (я этого не делал).

Смежные вопросы