If you follow the recommended approach and use a dedicated local repository for the integration tests (e.g. target/local-repo), you will likely encounter long build times. If the test repository has been cleaned, the plugin needs to re-download all artifacts from the central repo and the resulting network traffic slows the test execution down.
But you can configure the plugin to download released artifacts from your local repo. Note: This will work without optional settings with Maven >= 2.0.9 because many plugins versions are locked in the super POM. For older versions, you have to lock plugins versions.
To enable this feature, you have to add a settings.xml file in your project (for example in src/it/settings.xml) and modify the plugin configuration as this:
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-invoker-plugin</artifactId> <version>2.0.0</version> <configuration> ... <settingsFile>src/it/settings.xml</settingsFile> ... </configuration> </plugin> </plugins> </build> ... </project>
The settings must contain the following content which effectively tells Maven to use the local repository as a remote repository:
<?xml version="1.0"?> <settings> <profiles> <profile> <id>it-repo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>local.central</id> <url>@localRepositoryUrl@</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local.central</id> <url>@localRepositoryUrl@</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> </settings>
The token @localRepositoryUrl@ will be automatically replaced by the Invoker Plugin with the URL to the local repository used for the Maven invocation.