Как настроить путь класса eclipse, используемый для тестов junit?

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

Итак, если у меня есть папка: src/main/java (типичная вещь maven) целевая папка: целевые /Eclipse, классы

А также для ресурсов и т.д.

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

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

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

Некоторая дополнительная информация, вдохновленная Ответчиком Rich Seller: Maven настроен на выполнение следующих изменений ресурса:

process-resources resources:testResources

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

Элементы .classpath выглядят нормально. Там есть куча субпроектов maven, поэтому вложенность идет немного глубже, чем Rich, но в остальном это точно так же, за исключением этой строки:

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

Думаю, нам может не понадобиться этот, но это не повредит чему-либо.

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

Ответы

Ответ 1

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

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

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

Ответ 2

Интеграция Eclipse JUnit не имеет специальной конфигурации classpath, она будет работать с выходными папками, определенными в вашем пути к классам, и должна найти все классы, скомпилированные в эти папки. Возможно, в вашем файле .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, если это так, содержимое классов target/eclipse будет удаляться всякий раз, когда выполняется чистая цель, поэтому ваши тесты будут удалены из файловой системы до запуска тестов. Вы можете видеть, какие цели выполняются Maven, открыв свойства проекта (alt-enter) и выбрав элемент Maven.


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

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

Ответ 3

На всякий случай вы можете попробовать другой плагин для этого: я использую 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.

Ответ 4

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