Maven Wrapper is an important tool for Maven that allows projects to be built in environments without Maven pre-installed. Maven Wrapper includes a set of scripts and JAR files, ensuring that the project is built with a specific version of Maven, improving build reproducibility.
Role of Maven Wrapper:
- Ensure team members use the same version of Maven
- Simplify new environment setup, no need to manually install Maven
- Improve build reproducibility
- Facilitate CI/CD environment configuration
- Support project-specific Maven versions
Installing Maven Wrapper: Install using the Maven Wrapper plugin:
bashmvn wrapper:wrapper
Specify Maven version:
bashmvn wrapper:wrapper -Dmaven=3.8.6
Maven Wrapper File Structure:
shellproject/ ├── .mvn/ │ ├── wrapper/ │ │ ├── maven-wrapper.jar │ │ ├── maven-wrapper.properties │ │ └── MavenWrapperDownloader.java ├── mvnw # Unix/Linux/Mac script ├── mvnw.cmd # Windows script └── pom.xml
Using Maven Wrapper:
After installation, use ./mvnw (Unix/Linux/Mac) or mvnw.cmd (Windows) instead of the mvn command:
bash# Unix/Linux/Mac ./mvnw clean install # Windows mvnw.cmd clean install
Configuring Maven Wrapper:
Configure in the .mvn/wrapper/maven-wrapper.properties file:
propertiesdistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
Custom Maven Repository:
Configure JVM parameters in the .mvn/jvm.config file:
bash-Dmaven.repo.local=/path/to/local/repo
Using Maven Wrapper in CI/CD:
Jenkins Pipeline:
groovypipeline { agent any stages { stage('Build') { steps { sh './mvnw clean install' } } } }
GitLab CI/CD:
yamlbuild: stage: build script: - ./mvnw clean install
GitHub Actions:
yamljobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build with Maven Wrapper run: ./mvnw clean install
Advantages of Maven Wrapper:
- Version Consistency: All developers use the same Maven version
- Environment Independent: No need to pre-install Maven
- Easy Migration: Projects can easily migrate to new environments
- Automation Friendly: CI/CD environments require no additional configuration
- Security: Can lock Maven version to avoid using incompatible versions
Best Practices:
- Commit Maven Wrapper files to version control
- Exclude the
.mvn/wrapper/distsdirectory in.gitignore - Regularly update Maven Wrapper version
- Document how to use Maven Wrapper in project documentation
- Prioritize using Maven Wrapper in CI/CD environments
- Configure domestic mirrors to accelerate downloads
Updating Maven Wrapper:
bash./mvnw wrapper:wrapper -Dmaven=3.9.0
Common Issue Resolution:
-
Permission Issues: Ensure scripts have execute permissions
bashchmod +x mvnw -
Download Failure: Configure domestic mirrors or use a proxy
-
Version Conflict: Ensure the version in
maven-wrapper.propertiesis correct
Maven Wrapper is a standard configuration for modern Java projects, significantly improving project portability and build consistency.