Lessons learned
- Disable unit tests
- Disable the updating of SNAPSHOT dependencies
- Debug unit tests
- Memory usage
- Use Maven through a proxy
Disable unit tests
To launch Maven in a project and generate jars without launching the unit tests, add the following parameter:
-Dmaven.test.skip=true
Disable the updating of SNAPSHOT dependencies
When offline, or when you want to disable the updating of SNAPSHOT dependencies, add the -o parameter.
Debug unit tests
Sometimes we may need to debug the unit tests of a project, launched by Maven.
To do this, there is a parameter that causes Maven to wait for a remote debug connection on port 5005, before launching each test:
mvn -Dmaven.surefire.debug test
More information can be found in the documentation of the Maven debugging tests plugin
Memory usage
It is possible that for some of the tasks Maven launches, such as the compilation of Java classes, or the generation of Javadoc, the default memory settings will not be enough.
If this happens, an OutOfMemoryError message will appear in the console. We can increase the maximum memory allocation of the JVM by defining the MAVEN_OPTS variable that allows us to pass parameters to the JVM that launches Maven. For example:
Linux:
export MAVEN_OPTS=-Xmx256M
Windows:
set MAVEN_OPTS=-Xmx256M
When there is not enough space for the loading of classes (PermGenSpace), this will produce an error like:
[INFO] Compilation failure Failure executing javac, but could not parse the error: The system is out of resources. Consult the following stack trace for details. java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
In this case, we will need to increase the PermGen space with the -XX:MaxPermSize parameter. For example:
Linux:
export MAVEN_OPTS=-Xmx256M -XX:MaxPermSize=64m
Windows:
set MAVEN_OPTS=-Xmx256M -XX:MaxPermSize=64m
Use Maven through a proxy
If you access the Internet through a proxy, you will need to configure Maven to download dependencies through this proxy, following the Configuring a proxy instructions at the Maven page.
Basically, this consists of including the corresponding configuration in the .m2/settings.xml file:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>proxy.somewhere.com</host> <port>8080</port> <username>proxyuser</username> <password>somepassword</password> <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts> </proxy> </proxies> </settings>