2009-08-21 2 views
15

У меня есть проект eclipse, где каждая исходная папка имеет свою собственную связанную папку вывода. Вместо/classes он называется/eclipse-classes.Как настроить путь класса eclipse, используемый для тестов junit?

Так что, если у меня есть папка: SRC/главная/Java (типичный Maven вещь) целевая папка: целевые/затмений-классы

А также за ресурсы и т.д.

Это кажется (например, eclipse генерирует файлы .class, которые помещаются внутри этих папок), но при выполнении любых тестов Junit выдается исключение, в котором говорится, что «класс не найден». Я запускаю JUnit с помощью встроенного тест-лидера eclipse (т. Е. Щелкните правой кнопкой мыши класс, «запустите», «тест Junit»).

Копирование папки классов/затмений в/classes делает их успешными, то есть eclipse использует/classes, но я не могу найти никаких параметров конфигурации, чтобы изменить его. Есть ли способ узнать, где и почему eclipse все еще использует папку/classes?

(возможно, уместно, я также с помощью m2eclipse плагин)

некоторой дополнительной информации, вдохновленного ответа Богатого продавца: Maven сконфигурирован для работы следующего по изменениям в ресурсах:

process-resources resources:testResources 

В то время как это не будет делать ничего полезного (копии в неправильном каталоге), ресурсы не являются проблемными, поскольку они попадают в правильное место.

Элементы .classpath выглядят хорошо. Там куча Maven подпроектов так вложенности идет немного глубже, чем то, что отправил Рич, но в остальном он точно такой же для этой линии, кроме:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 

Я думаю, что мы, возможно, не нужно, что один, но это ничего не повреждая атм ,

edit2: Дальнейшее тестирование показывает, что eclipse генерирует файлы классов в папках/eclipse-classes и в папке/classes. Кажется, что m2eclipse запускает mvn build в фоновом режиме при создании автоматически, но я не могу найти способ отключить это. Я попытаюсь связаться с разработчиками m2eclipse, если у нас нет других идей.

+0

Вы имеете в виду, что для исходных папок «сервер» и «клиент» у вас были бы «серверные классы» и «клиентские классы» в качестве выходных папок? –

+0

Как вы начинаете JUnit? Вы используете подключаемый модуль JUnit Eclipse или начинаете модульные тесты с Maven? – Dirk

+0

Я добавил ответы в текст вопроса. – wds

ответ

7

Если вы используете m2eclipse, конфигурация в проекте Eclipse перезаписывается плагином. См. this article для решения.

Причина этого заключается в том, что некоторый Maven плагин не может справиться с каталогом, который находится за пределами target/, поэтому m2eclipse разработчики заставляют папки для скомпилированных классов, чтобы быть target/classes и target/test-classes, независимо от того, что вы настраиваете в Eclipse.

Используя профиль, вы можете использовать разные папки для Eclipse. Тем не менее, нецелесообразно изменять выходные папки для maven (и его плагинов).

+0

Я так не думаю, компилятор eclipse выводит классы в отдельно определенные папки просто отлично. Таким образом, компилятор eclipse подбирает мои выходные папки, это нарушенная кластерная среда выполнения. Я не хочу, чтобы maven отвечал за создание этих .class-файлов, так как это может сломать инкрементную компиляцию. – wds

+0

Кроме того, упомянутое решение, похоже, связано с настройкой maven для размещения его файлов .class где-то еще, когда используется eclipse, поэтому eclipse может использовать целевые/классы. Я приближаюсь к нему с другой стороны, я думаю: настройка затмения, чтобы выйти из пути maven. Это похоже на более логичный подход ко мне (не загрязняя проект .pom), но только если плагин junit каким-то образом использует путь сборки для создания своего пути к среде выполнения. – wds

+0

Эта работа вокруг исправила мою проблему с classpath с момента перехода из maven-eclipse-plugin в m2eclipse. Спасибо за публикацию. – JamesC

4

Интеграция Eclipse JUnit не имеет специальной конфигурации пути к классам, она будет работать с выходными папками, определенными в вашем пути к классам, и должна найти все классы, скомпилированные в эти папки. Возможно, в вашем файле .classpath есть что-то хитрое, так что JUnit запутался (по умолчанию файл .classpath скрыт от представления, он находится в корне проекта).

Основываясь на вашем описании, я ожидаю увидеть записи, как показано ниже (обратите внимание на папку вывода по умолчанию и переопределение для src/main/java и src/main/resources). Это выглядит заметно отличается ваш путь к классам, если это так, что может быть проблема

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/> 
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/> 
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
<classpathentry kind="output" path="target/classes"/> 

Это длинный выстрел, но это также может быть, что Maven чистый настроен на ваш проект, если это имеет место содержимое целевых/eclipse-классов будет удаляться всякий раз, когда выполняется чистая цель, поэтому ваши тесты будут удалены из файловой системы до запуска тестов. Вы можете видеть, какие цели выполняются Maven, открыв свойства проекта (alt-enter) и выбрав элемент Maven.


Эта часть напрямую не отвечает на ваш вопрос, но вы все равно можете пригодиться. Я имею тенденцию иметь мои выходные каталоги Eclipse так же, как и для Maven, и не имеют проблем внутри Eclipse (я изменяю конструктор Maven для запуска только ресурсов процесса, чтобы он не пытался скомпилировать).

Если я создаю Maven, компилятор Maven будет создавать любые измененные классы (это было бы все они, если бы был включен чистый). Последующая модификация в Eclipse обнаруживается инкрементным компилятором и обрабатывается, все в порядке. Я автоматически выключаю Build Automatically, но это только потому, что меня это раздражает, возможно, Maven и Eclipse fght, если вы их оба отключили.

+0

Я уверен, что maven работает только с ресурсами процесса. Я попробую остальные в понедельник и вернусь к вам. – wds

+0

добавил некоторую дополнительную информацию, не вижу ничего там, что могло бы объяснить это ... – wds

+0

I + 1 написал сообщение, поскольку в конце концов я просто отказался и настроил maven и eclipse, чтобы использовать те же выходные папки. Это ломается очень редко, но я думаю, что это достаточно хорошо (TM). – wds

1

На всякий случай вы можете попробовать другой плагин для этого: я использую maven-eclipse-plugin для создания моих настроек проекта Eclipse. Я настраиваю плагин для настройки моего проекта Eclipse, чтобы использовать полностью отдельный выходной каталог для классов (см. Ниже). Это относительно корня проекта, поэтому он находится вне цели.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>eclipse_build</outputDirectory> 
     </configuration> 
    </plugin> 

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

0

попробуйте бежать mvn eclipse:eclipse. Это устранило проблему для меня

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