Подтвердить что ты не робот

Как добавить другую папку исходного кода в Maven и скомпилировать ее в отдельную папку?

У меня есть папка src/test/java по умолчанию для наших модульных тестов. Для тестов интеграции доступна отдельная папка src/integration/java.

Я сконфигурировал maven-surefire-plugin для выполнения тестов unit/integration в их соответствующих фазах. Это отлично работает, когда скомпилированные классы находятся в правильном каталоге. К сожалению, Maven поддерживает только одну тестовую исходную папку и одну тестовую выходную папку.

С плагином build-helper для mavens я мог бы добавить еще одну тестовую папку, но скомпилированные классы будут сгенерированы в test-classes, но я хочу скомпилировать классы из src/integration/java в target/integration-test-classes. Возможно ли это?

src/test/java > target/test-classes
src/integration/java > target/integration-test-classes

PS: Мне не нравится это исключать/включать в базовое решение пакета (исключить все **/it/** файлы из тестовой фазы по умолчанию и исключить все **/unit/** из фазы интеграции.

4b9b3361

Ответ 1

Извините, нет никакого способа сделать это, ИМХО даже с некоторыми взломами в виду. Концепция заключается в том, что существует только один целевой каталог для скомпилированных классов и один для скомпилированных тестовых классов (даже схема тегов <build> раскрывает это). Честно говоря, я действительно не думаю, что это возможно с Maven. Maven способствует прямому, чистому и четкому дизайну вашего приложения, используя хорошо продуманные модули.

Если вы думаете, что вы действительно хотите сделать, это создать модуль интеграционных тестов. Это обычная практика. До сих пор у меня всегда был отдельный модуль тестирования интеграции, и у меня никогда не было проблем с этим. Конечно, вы должны зависеть от всех необходимых модулей для выполнения этих тестов. Вы даже можете зависеть от других классов тестирования модулей, используя <type>test-jar</type> с вашим выражением о зависимости, как указано здесь:

http://maven.apache.org/guides/mini/guide-attached-tests.html

Мне не нравится этот метод, однако он обычно предпочитает иметь отдельный модуль с поддержкой тестирования, например базовые классы для тестовых примеров JUnit и т.д.

Ответ 2

Основываясь на том, что вы написали, это звучит так, будто вы не назвали ваши тесты интеграции правильно, и вы не использовали maven-failsafe-plugin для своих тестов интеграции. На основе соглашения maven-failsafe-plugin вы должны назвать свои интеграционные тесты, например *IT.java. Если вы соответствующим образом назвали свои тесты интеграции, вы можете справиться с этим с более или менее конфигурацией, подобной этой:

<project ...>
  [...]
  <build>
    [...]
     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.9.1</version>
        <executions>
          <execution>
            <id>add-test-source</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/integration/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      [...]
  </build>
  [...]
</project>

С вышесказанным можно провести тесты интеграции в одном модуле. Но это не решит идею скомпилировать классы скомпилированных интеграционных тестов в отдельную папку.

Иногда лучше иметь отдельный тестовый модуль интеграции, который содержит только те тесты интеграции (что приводит к созданию многомодульной сборки). Если вам нравится оставлять соглашения Maven, вы можете попытаться настроить плагин maven-compiler для использования другого выходного пути (например, target/integration-tests/classes), который, по-видимому, не будет работать.

Ответ 3

Если вы хотите изменить исходную папку unit test (а не добавить дополнительный), просто измените элемент testSourceDirectory:

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>

Это полезно, если все ваши модульные тесты написаны в groovy. (Но вам также нужно будет настроить maven для компиляции вашего кода groovy - см. groovy-eclipse-maven-plugin или build-helper-maven-plugin.)