Как я могу настроить eclipse classpath, используемый для тестов junit? - PullRequest
15 голосов
/ 21 августа 2009

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

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

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

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

Копирование папки / eclipse-classes в / 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, если у кого-то здесь нет других идей.

Ответы [ 4 ]

7 голосов
/ 21 августа 2009

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

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

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

4 голосов
/ 21 августа 2009

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

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

<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-classes будет отбрасываться при каждом запуске чистой цели, поэтому ваши тесты будет удален из файловой системы до запуска тестов. Чтобы узнать, какие цели выполняет Maven, откройте свойства проекта ( alt-enter ) и выберите элемент Maven.


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

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

1 голос
/ 22 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...