Maven wrapper is a library to make maven build easy. You do not need to install maven manually thanks to maven wrapper because it automatically install the specific maven version into your project. Since I usually use gradle wrapper and sbt-extras, it was very easy to use maven wrapper as well in my Java project.
But I had a trouble to build a project after switching user. For example, I wanted to create build environment by
root user but building the project itself should be done by non-priviledged user. I initially thought it can be achieved by
sudo -u lewuathe:
$ sudo -u lewuathe ./mvnw install
But it failed due to
Exception in thread "main" java.io.FileNotFoundException: /home/lewuathe/.m2/wrapper/dists/apache-maven-3.3.9-bin/2609u9g41na2l7ogackmif6fj2/apache-maven-3.3.9-bin.zip.part (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
I was disapponted of this because I believed maven wrapper automatically :( I read the source code of maven wrapper and finally found a solution. Maven wrapper gets the base directory where maven is installed from
MAVEN_USER_HOME environment variable.
So finally what we need to do is this:
$ mkdir /home/lewuathe/.m2 $ MAVEN_USER_HOME=/home/lewuathe/.m2 sudo -u lewuathe ./mvnw ...
It worked!Written on November 22nd , 2017 by lewuathe