65

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?

6
  • That sounds wrong in my mind? You need it for compiling and runtime but not for Testing? What are you testing? Commented Aug 21, 2012 at 13:08
  • 1
    @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). Commented Aug 21, 2012 at 13:15
  • If you have embedded glassfish your tests whould not tests things like this. This sounds like integration tests. Commented Aug 21, 2012 at 13:38
  • 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. Commented Aug 21, 2012 at 13:44
  • What about one profile for each logback implementation ? Commented Aug 21, 2012 at 15:47

1 Answer 1

76

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.

Sign up to request clarification or add additional context in comments.

4 Comments

This is actually a very good soultion! Considering that unit and integration tests are executed by different plugins (surefire and failsafe), it's very convenient to manage classpath using plugin-specific configuration.
Heads'up. This does not play well with IntellJ Idea Test Runner. The maven-surefire-plugin Exclude classpathDependencyExclude configuration seems to be ignored. Meaning your only workaround on IntellJ Idea is to use the Terminal to run your test or the Maven Project tool window. See open ticket . That said this works with Eclipse.
This is now working in 2019.3 Intellij. Refer youtrack.jetbrains.com/issue/IDEA-122783 .
This doesn't work for me in Eclipse Version: 2019-12 (4.14.0) - it does work when running tests from the Maven command line.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.