java.lang.OutOfMemoryError in maven
Maven是一个自动化构建项目管理工具。如果项目中有10000个或更多的java文件,而你试图用 "maven clean install "来构建该项目,则构建失败,出现错误 -java.lang.OutOfMemoryError 。
maven clean install会尝试清理/删除项目并编译项目,并测试项目和构建应用程序。
OutOfMemoryError问题要么发生在项目的compile 阶段,要么发生在构建maven项目时的test 阶段
对于test 案例的执行,maven使用surefire-plugin 。在这两种情况下,你都有一个堆,可以通过多种方式增加堆大小。
实际上OutOfMemoryError 错误日志给出了额外的信息,如下图所示
java.lang.OutOfMemoryError: Java heap space
要解决这个错误,java.lang.OutOfMemoryError。Java heap space Java heap space意味着在maven项目的堆内存中没有足够的空间来分配你的对象执行。
java.lang.OutOfMemoryError: Perm Gen space
Perm Gen space是一个与java中的类加载错误有关的错误。这个错误发生在类加载器加载类的过程中,当你的应用程序在执行结束后仍然保持着对类的引用,我们称之为内存泄漏,所以当maven发生这个错误时,你必须使用系统的类加载器。
为了调试确切的原因,请使用maven -x clean install 命令,它能给出确切的根源,并提供详细的附加日志堆栈跟踪。
首先,你必须找出这个错误发生在哪个阶段 ,如果错误是在编译时发生的,你必须根据你的系统容量增加堆的大小,如Linux和windows下的以下几行代码。
修复windows下maven的OutOfMemoryError:-
改变环境变量MAVEN\_OPTS ,通过以下代码增加堆的大小。
set MAVEN_OPTS=-Xmx768M -XX:MaxPermSize=768M
修复Linux/Unix下maven的OutOfMemoryError:--增加环境变量 的堆大小
增加环境变量MAVEN\_OPTS 的堆大小,对Linux版本的处理是不同的。
export MAVEN_OPTS=-Xmx768M -XX:MaxPermSize=768M
大多数情况下,OutOfMemoryError ,通过以上几行代码就能解决,如果不能解决,就按照以下方法处理
maven中的maven-surefire-plugin的问题:
如前所述,surefire 插件使用不同的机制加载类,我们将通过以下方法指示该插件使用system classloader
<configuration>
<usesystemclassloader>false</usesystemclassloader>
<forkmode>never</forkmode>
</configuration>
你也可以用configuration 选项增加插件的堆大小。argLine
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>-Xmx1024m</argLine>
</configuration>
</plugin>
</plugins>
</build>
以下命令更有助于调试你的应用程序,以运行你的项目
maven -x
mvn -Dmaven.surefire.debug
希望你对解决maven在windows、Linux和Unix环境下的OutOfMemoryError问题有了想法。
如果您有什么要分享的,请随时评论。