Исключить зависимость maven для тестов

У меня есть зависимость, необходимая для компиляции и выполнения, но я хочу исключить ее при выполнении тестов. Это возможно? Может быть, настроив профиль? Но как отключить его только для фазы test жизненного цикла?


person jFrenetic    schedule 21.08.2012    source источник
comment
Это звучит неправильно в моем уме? Вам это нужно для компиляции и выполнения, но не для тестирования? Что вы тестируете?   -  person khmarbaise    schedule 21.08.2012
comment
@khmarbaise Я знаю, это может звучать странно. Проблема в том, что мне нужно использовать одну версию реализации журнала для компиляции и выполнения, а другую для тестов (которая является транзитивной зависимостью от embedded-glassfish-all с test scope).   -  person jFrenetic    schedule 21.08.2012
comment
Если у вас есть встроенная стеклянная рыба, ваши тесты не будут проверять такие вещи. Это похоже на интеграционные тесты.   -  person khmarbaise    schedule 21.08.2012
comment
Да, мы проводим интеграционное тестирование. Но это не имеет большого значения. Я пытаюсь выяснить, есть ли способ исключить зависимость на определенном этапе.   -  person jFrenetic    schedule 21.08.2012
comment
Как насчет одного профиля для каждой реализации logback?   -  person gontard    schedule 21.08.2012
comment
@gontard Я действительно упомянул profiles в своем вопросе. Я просто не могу понять, как активировать/деактивировать профиль для какой-то конкретной фазы за один прогон. Боюсь, это вряд ли возможно.   -  person jFrenetic    schedule 22.08.2012


Ответы (1)


Вы можете (пере)настроить путь к классам на этапе тестирования благодаря плагин maven surefire. Вы можете добавить элементы classpath или исключить зависимости.

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.2</version>
        <configuration>
          <additionalClasspathElements>
            <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>
            <additionalClasspathElement>path/to/additional/jar</additionalClasspathElement>
          </additionalClasspathElements>
          <classpathDependencyExcludes>
            <classpathDependencyExclude>org.apache.commons:commons-email</classpathDependencyExclude>
          </classpathDependencyExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Как отметил @jFrenetic, вы можете сделать то же самое с maven-failsafe-plugin.

person gontard    schedule 22.08.2012
comment
Спасибо! Попробую позже. - person jFrenetic; 22.08.2012
comment
Это на самом деле очень хорошая душа! Учитывая, что модульные и интеграционные тесты выполняются разными плагинами (surefire и failsafe), очень удобно управлять classpath, используя конфигурацию плагина. - person jFrenetic; 31.08.2012
comment
Берегись. Это не очень хорошо работает с IntelJ Idea Test Runner. Похоже, что конфигурация maven-surefire-plugin Exclude classpathDependencyExclude игнорируется. Это означает, что единственным обходным решением для IntelJ Idea является использование терминала для запуска теста или окна инструментов Maven Project. См. открытый тикет . Тем не менее, это работает с Eclipse. - person DaddyMoe; 16.01.2018
comment
Теперь это работает в 2019.3 Intellij. См. youtrack.jetbrains.com/issue/IDEA-122783 . - person tuk; 14.09.2019