2014-12-22 2 views
1

Мы используем Gradle для управления зависимостями и для развертывания приложения. Наше приложение представляет собой обычное Java-приложение с общедоступным методом main(). Eclipse позволяет запускать приложение непосредственно через контекстное меню (без Gradle).Конфликт с тестовыми классами с обычным приложением

Однако Eclipse добавляет классы тестов в путь класса. Поскольку мы используем аннотации Spring для тестовых классов, а для реальных приложений возникают конфликты. Например. соединение с базой данных создается дважды, что приводит к ошибкам запуска.

Есть ли способ сказать Eclipse исключить классы тестов для добавления в путь класса?

Я знаю, что есть приложения для плагинов градиента, которые позволяют компилировать и запускать приложение. Однако нам нужно запускать несколько приложений параллельно, что приводит к проблемам с блокировкой с помощью плагина gradle.

Редактировать: Я был неясно: проблема в том, что проект (libs.core), от которого зависит фактический проект (applications.core), содержит включенные классы тестов. Тест-классы фактического проекта не включены в путь Java-класса.

Для всех проектов мы имеем следующую структуру:

Java Classes: src/main/java/ 
Test Classes: src/test/java 

.classpath файл файл проект 'libs.core' содержит следующее:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="output" path=".eclipse-classes"/> 
    <classpathentry kind="src" path="src/main/java"/> 
    <classpathentry kind="src" path="src/main/resources"/> 
    <classpathentry kind="src" path="src/test/java"/> 
    <classpathentry kind="src" path="src/test/resources"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/> 
    <classpathentry sourcepath="[path to gradle cache]commons-logging-1.1.3-sources.jar" kind="lib" path="[path to gradle cache]commons-logging-1.1.3.jar" exported="true"/> 
    [other dependencies] 
</classpath> 

.classpath файл из Файл проекта "applications.core" содержит:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="output" path=".eclipse-classes"/> 
    <classpathentry kind="src" path="src/main/java"/> 
    <classpathentry kind="src" path="src/main/resources"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/> 
    <classpathentry kind="src" path="/libs.core" exported="true"/> 
    <classpathentry sourcepath="[path to gradle cache]commons-logging-1.1.3-sources.jar" kind="lib" path="[path to gradle cache]commons-logging-1.1.3.jar" exported="true"/> 
    [other dependencies] 
</classpath> 

ответ

2

Проблема в том, что затмение не понимает разницы между тестовым кодом и производственным кодом. Как отметил Макото, обычно основной код лежит в src/main/java и тестовый код в src/test/java. Но даже при соблюдении этих соглашений eclipse будет получать код от src/test/java при запуске приложения. Я вижу два варианта для вас на данный момент:

  • исключить папку SRC/тест вручную в вашей конфигурации запуска
  • переместить тесты в отделено тестовый проект

Чистое решение будет то, что Eclipse, наконец, начинает поддерживать различные типы источников, поскольку идея существует в течение многих лет, и пользователь java во всем мире просят в течение многих лет.

веселит, Рене

+0

Я отредактировал мой вопрос.Для меня было очевидным, чтобы отдельные классы испытаний отличались от других, поэтому я забыл об этом. Я хотел бы предотвратить добавление разных проектов, поэтому ваш первый подход кажется лучше. Можете ли вы дать мне подсказку о том, как я могу исключить конкретную исходную папку ссылочного проекта в моей конфигурации запуска? –

1

Это звучит как ди структурированная структура проекта.

Maven prescribes a standard way, чтобы отделить ваш исходный код, что является тем, что уважает уважение. Как правило, у них есть источник в src/main/java, а их тестовый код - в src/test/java, за которым последует типичная иерархия пакетов.

Я бы посоветовал вам переместить ваши тестовые файлы в эту структуру. Если пакеты все еще правильны и звучат, Gradle успешно выполнит ваши тесты.

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