Записи пути к классам Eclipse используются только для тестов - PullRequest
18 голосов
/ 15 июля 2009

В Maven вы можете иметь зависимости времени компиляции и test зависимости. Эта функция мне нравится, и плагин M2Eclipse делает ее доступной и в Eclipse, и это здорово. Поэтому, если я добавлю jmock.jar в свой проект в качестве тестовой зависимости, он будет отображаться в пути к классам для тестов JUnit, но не будет присутствовать при отладке самого приложения.

Это именно то, чего я хотел бы достичь сейчас, но без M2Eclipse или Maven. Есть ли способ сделать это в простом Eclipse? (Возможно, без установки каких-либо плагинов.)

Ответы [ 5 ]

11 голосов
/ 15 июля 2009

Вы можете разделить все свои тесты в другом проекте и добавить основной проект в качестве зависимости ( Project-> Properties -> Java Build Path -> Projects -> Добавить ... )

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

Создайте тестовый проект как обычно, теперь вам нужно создать связанный ресурс для добавления в папку src / test / java. Лучше всего создавать его с помощью переменной, чтобы ваши проекты могли сохранять некоторую независимость от платформы. Чтобы создать новую связанную папку, выберите Новая -> Папка , введите src в поле имя папки: и нажмите Дополнительно >>

Нажмите Ссылка на папку в файловой системе Нажмите Переменные ... , чтобы вызвать диалоговое окно Выбор переменной пути .

Если вы в первый раз или вы ссылаетесь на новое местоположение, выберите New ... и дайте переменной разумное имя и путь. Если все ваши проекты находятся в c: \ workspaces \ foo **, имеет смысл вызвать переменную ** WORKSPACE_ROOT и указать ей этот путь. Если у вас есть другое соглашение, которое хорошо, но имеет смысл поместить комментарий в файл .project, чтобы у кого-то была возможность выяснить, какое должно быть правильное значение.

Предполагая вышеприведенные значения, вы теперь можете установить значение WORKSPACE_ROOT / [имя проекта субъекта] / src в поле ввода

Как только вы подтвердите, что должны видеть папку src с маленькой стрелкой, и если вы посмотрите в файл .project, то увидите что-то вроде этого:

<linkedResources>
    <link>
        <name>src</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/esf-ns-core-rp/src</locationURI>
    </link><!--NOTE the WORKSPACE_ROOT variable points to the folder containing the subject project's sandbox-->
</linkedResources>

Теперь вы можете добавить папку src / test / java в качестве исходного местоположения как обычно.

Обратите внимание, что вы также можете открыть общий доступ только к папке src / test / java, изменив конфигурацию на что-то вроде этого:

<linkedResources>
    <link>
        <name>src/test/java</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/my-project/src/test/java</locationURI>
    </link>
</linkedResources>

Это дает больше контроля над конфигурацией, но вам придется повторить для src / test / resources, src / it / java и т. Д.

Затем вы устанавливаете все тестовые зависимости только в тестовом проекте.

Очень не красиво, но это работает (я также использовал это, когда мой уровень соответствия тестов отличается от основного уровня соответствия, например 1,5 для тестов, но 1,4 для целевой среды).

9 голосов
/ 15 июля 2009

Боюсь, ответ в том, что ты не можешь. Есть 2 открытых вопроса, которые были перенесены из 3.5, связанные с вашей проблемой:

1 голос
/ 13 апреля 2011

Поскольку вы используете Eclipse и Maven, вы можете обойти его. Создайте новую конфигурацию запуска «Maven Build» с целью «exec: java» и параметрами «exec.mainClass = com.example.Starter». Таким образом, путь к классу будет рассчитан Maven.

0 голосов
/ 26 июля 2018

Eclipse Photon Наконец добавил эту функцию, с поддержкой m2e.

0 голосов
/ 15 июля 2009

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

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

Зачем вам нужно это разделять так? Что это поможет вам достичь?

...