Записи пути к классам Eclipse используются только для тестов
В Maven вы можете иметь зависимости во время компиляции и тестовые зависимости. Эта функция мне нравится, и плагин M2Eclipse делает ее доступной и в Eclipse, и это здорово. Так что, если я добавлю jmock.jar
для моего проекта в качестве тестовой зависимости он будет отображаться в пути к классам для тестов JUnit, но не будет присутствовать при отладке самого приложения.
Это именно то, чего я хотел бы достичь сейчас, но без M2Eclipse или Maven. Есть ли способ сделать это в простом Eclipse? (Возможно, без установки каких-либо плагинов.)
5 ответов
Боюсь, ответ в том, что ты не можешь. Есть 2 открытых вопроса, которые были перенесены из 3.5, связанные с вашей проблемой:
Вы можете разделить все свои тесты в другом проекте и добавить основной проект в качестве зависимости (Project-> Properties -> Java Build Path -> Projects -> Add...)
Обновление: чтобы избежать изменения исходной структуры проекта, ваши тестовые проекты могут использовать связанные местоположения.
Создайте тестовый проект как обычно, теперь вам нужно создать связанный ресурс для добавления в папку src/test/java. Лучше всего создавать его с помощью переменной, чтобы ваши проекты могли сохранять некоторую независимость от платформы. Для создания новой связанной папки выберите New -> Folder, введите src в поле имени папки: затем нажмите Advanced>>
Нажмите " Ссылка на папку в файловой системе". Нажмите " Переменные...", чтобы открыть диалоговое окно " Выбрать переменную пути".
Если это ваш первый раз или вы ссылаетесь на новое местоположение, выберите Новое... и дайте переменной разумное имя и путь. Если все ваши проекты находятся в 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 для целевой среды).
Поскольку вы используете Eclipse и Maven, вы можете обойти это. Создайте новую конфигурацию запуска "Maven Build" с целью "exec:java" и параметрами "exec.mainClass=com.example.Starter". Таким образом, путь к классу будет рассчитан Maven.
Eclipse Photon наконец-то добавил эту функцию, с поддержкой m2e.
На самом деле, если вы посмотрите в Eclipse, как Maven интегрирует зависимости, это не повлияет на зависимости между тестами и средой выполнения, и ваши тестовые библиотеки всегда доступны.
Maven сохранит разницу при упаковке приложения и при создании пути к классам среды выполнения, если maven контролирует выполнение этой части. Когда речь идет о затмении, Maven просто добавляет их все без вопросов в путь построения затмения.
Почему вы должны разделить это так? Что это поможет вам достичь?