2015-04-03 15:18:39 -04:00
|
|
|
# Maven Wrapper
|
2013-03-04 11:23:45 -05:00
|
|
|
|
2017-04-24 15:14:09 -04:00
|
|
|
The Maven Wrapper is an easy way to ensure a user of your Maven build has everything necessary to run your Maven build.
|
|
|
|
Why might this be necessary? Maven to date has been very stable for users, is available on most systems or is easy to
|
|
|
|
procure: but with many of the recent changes in Maven it will be easier for users to have a fully encapsulated build
|
|
|
|
setup provided by the project. With the Maven Wrapper this is very easy to do and it's a great idea borrowed from Gradle.
|
2013-03-04 11:24:48 -05:00
|
|
|
|
2017-04-24 15:14:09 -04:00
|
|
|
The easiest way to setup the Maven Wrapper for your project is to use the [Takari Maven Plugin][1] with its provided
|
|
|
|
`wrapper` goal. To add or update all the necessary Maven Wrapper files to your project execute the following command:
|
2013-03-04 11:24:48 -05:00
|
|
|
|
2015-04-03 15:18:39 -04:00
|
|
|
```
|
|
|
|
mvn -N io.takari:maven:wrapper
|
|
|
|
```
|
2013-03-04 11:24:48 -05:00
|
|
|
|
2015-08-19 23:25:01 -04:00
|
|
|
Normally you instruct users to run the `mvn` command like the following:
|
2013-03-04 11:24:48 -05:00
|
|
|
|
2015-04-03 15:18:39 -04:00
|
|
|
```
|
|
|
|
$ mvn clean install
|
|
|
|
```
|
|
|
|
|
2015-04-03 16:04:28 -04:00
|
|
|
But now, with a Maven Wrapper setup, you can instruct users to run wrapper scripts:
|
2015-04-03 15:18:39 -04:00
|
|
|
|
|
|
|
```
|
|
|
|
$ ./mvnw clean install
|
|
|
|
```
|
|
|
|
|
2015-04-03 16:04:28 -04:00
|
|
|
or
|
|
|
|
|
|
|
|
```
|
2015-07-16 06:59:12 -04:00
|
|
|
$ ./mvnw.cmd clean install
|
2015-04-03 16:04:28 -04:00
|
|
|
```
|
|
|
|
|
2017-04-24 15:14:09 -04:00
|
|
|
A normal Maven build will be executed with the one important change that if the user doesn't have the necessary version
|
|
|
|
of Maven specified in `.mvn/wrapper/maven-wrapper.properties` it will be downloaded for the user first.
|
2015-04-03 15:18:39 -04:00
|
|
|
|
2017-04-17 17:06:44 -04:00
|
|
|
## Supported Systems
|
|
|
|
|
|
|
|
The wrapper should work on various operating systems including
|
|
|
|
|
|
|
|
* Linux (numerous versions, tested on Ubuntu and CentOS)
|
|
|
|
* OSX
|
|
|
|
* Windows (various newer versions)
|
|
|
|
* Solaris (10 and 11)
|
|
|
|
|
2017-04-17 17:58:21 -04:00
|
|
|
For all those *nix operating systems, various shells should work including
|
2017-04-17 17:06:44 -04:00
|
|
|
|
2017-04-17 17:58:21 -04:00
|
|
|
* sh
|
2017-04-17 17:06:44 -04:00
|
|
|
* bash
|
|
|
|
* dash
|
|
|
|
* zsh
|
|
|
|
|
2017-04-17 17:58:21 -04:00
|
|
|
In terms of Apache Maven versions itself, the wrapper should work with any Maven 3.x version and it defaults to the
|
2017-08-29 13:39:19 -04:00
|
|
|
latest release - currently 3.5.0. We do NOT plan to support the deprecated, EOL'ed Maven 2.x.
|
2017-04-04 15:49:36 -04:00
|
|
|
|
2017-04-21 23:51:39 -04:00
|
|
|
The maven-wrapper itself is compiled to work with Java 5. The Takari Maven Plugin for installation however uses Java 7.
|
|
|
|
Once the wrapper is installed with the plugin you should be able to use the wrapper on the project with Java 5 and up.
|
|
|
|
This is however not really tested by the committers.
|
|
|
|
|
2017-04-04 15:49:36 -04:00
|
|
|
## Changes
|
|
|
|
|
|
|
|
Please check out the [changelog](./CHANGELOG.md) for more information about our releases.
|
|
|
|
|
2017-09-12 14:33:43 -04:00
|
|
|
## Verbose Mode
|
|
|
|
|
|
|
|
The wrapper supports a verbose mode in which it outputs further information. It
|
|
|
|
is activated by setting the MVNW_VERBOSE environment variable to `true`.
|
|
|
|
|
|
|
|
By default it is off.
|
|
|
|
|
2018-02-19 22:52:13 -05:00
|
|
|
## Usage without Binary JAR
|
|
|
|
|
|
|
|
By default, the Maven Wrapper JAR archive is added to the using project as small
|
|
|
|
binary file `.mvn/wrapper/maven-wrapper.jar`. It is used to bootstrap the download and
|
|
|
|
invocation of Maven from the wrapper shell scripts.
|
|
|
|
|
|
|
|
If your project is not allowed to contain binary files like this, you can
|
|
|
|
configure your version control system to exclude checkin/commit of the wrapper
|
|
|
|
jar.
|
|
|
|
|
|
|
|
If the JAR is not found to be available by the scripts they will attempt to
|
|
|
|
download the file from the URL specified in
|
|
|
|
`.mvn/wrapper/maven-wrapper.properties` under `wrapperUrl` and put it in place. The
|
|
|
|
download is attempted via curl, wget and, as last resort, by compiling the
|
|
|
|
`./mvn/wrapper/MavenWrapperDownloader.java` file and executing the resulting class.
|
|
|
|
|
2015-07-16 06:59:12 -04:00
|
|
|
## Using a Different Version of Maven
|
|
|
|
|
|
|
|
To switch the version of Maven used to build a project you can initialize it using
|
|
|
|
|
|
|
|
```
|
|
|
|
mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
|
|
|
|
```
|
|
|
|
|
2017-04-24 15:14:09 -04:00
|
|
|
which works for any version except snapshots. Once you have a wrapper you can change its version by setting the
|
|
|
|
`distributionUrl` in `.mvn/wrapper/maven-wrapper.properties`, e.g.
|
2015-07-16 06:59:12 -04:00
|
|
|
|
|
|
|
```
|
2018-02-19 22:52:13 -05:00
|
|
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.2.1/apache-maven-3.2.1-bin.zip
|
2015-07-16 06:59:12 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
[1]: https://github.com/takari/takari-maven-plugin
|
2018-02-20 00:21:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
## Developing and Releasing
|
|
|
|
|
|
|
|
To test Maven wrapper usage:
|
|
|
|
|
|
|
|
- build the maven wrapper as snapshot version
|
|
|
|
- update version in maven plugin
|
|
|
|
- build maven plugin
|
|
|
|
- use on test project with maven plugin version
|
|
|
|
|
|
|
|
|
|
|
|
For release
|
|
|
|
|
|
|
|
- make sure version in mvnw files and config files and pom files is new upcoming
|
|
|
|
release
|
|
|
|
- cut maven release with usual release plugin usage
|
|
|
|
- update maven plugin to release version
|
|
|
|
- release it as well
|