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 Answer
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.
4 Comments
jFrenetic
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.DaddyMoe
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.tuk
This is now working in 2019.3 Intellij. Refer youtrack.jetbrains.com/issue/IDEA-122783 .
Chris Wolf
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.
test scope).