Fast Build Configuration
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>3.8.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> <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> <activeProfiles> <activeProfile>it-repo</activeProfile> </activeProfiles> </settings>
The token @localRepositoryUrl@
will be automatically replaced by the Invoker Plugin with the URL to the local repository used for the Maven invocation.
Fast Build Configuration - mergeUserSettings and mirrors
When you want to use Fast Build Configuration with options mergeUserSettings
you should take care for your mirror setting.
If you have in ~/.m2/settings.xml
something like:
<mirrors> <mirror> <id>mirrorId</id> <name>Public Mirrors</name> <url>url_to_my_mirror</url> <mirrorOf>*,!repo1,!repo2</mirrorOf> </mirror> </mirrors>
Please look at mirrorOf
tag, single *
means match all repositories for mirroring - also repository with id local.central
will be mirrored. In effective Fast Build Configuration will not work as expected.
You should change this to similar:
<mirrors> <mirror> <id>mirrorId</id> <name>Public Mirrors</name> <url>url_to_my_mirror</url> <mirrorOf>external:*,!repo1,!repo2</mirrorOf> </mirror> </mirrors>
Where external:*
- matches all repositories except those using localhost or file based repositories.