49
votes

I have a dependency that is needed for a compilation and runtime but I want to exclude it when running tests. Is this possible? Maybe, by setting up a profile? But how do I deactivate it only for test lifecycle phase?

1
That sounds wrong in my mind? You need it for compiling and runtime but not for Testing? What are you testing?khmarbaise
@khmarbaise I know it might sound strange. The problem is that I need to use one logback implementation version for compilation and runtime, but another one for tests (which comes as a transitive dependency from embedded-glassfish-all with test scope).jFrenetic
If you have embedded glassfish your tests whould not tests things like this. This sounds like integration tests.khmarbaise
Yep, we're doing some integration testing. But this doesn't really matter. I'm trying to find out if there is a way to exclude a dependency during certain phase.jFrenetic
What about one profile for each logback implementation ?gontard

1 Answers

61
votes

You could (re)configure the classpath during the test phase thanks to the maven surefire plugin. You can add classpath elements or exclude dependencies.

<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>

As noted by @jFrenetic you could do the same with maven-failsafe-plugin.