在maven project中,test case的运行是少不了的。随着项目复杂度的增加,相应的test cases的数量也会随之增加。
突然有一天,用eclipse 内置的m2e插件Run as -> Maven test运行test cases,跑着跑着就报错如下:
“java.lang.OutOfMemoryError: PermGen space” error
Google了各种办法之后没有解决:
1.add 环境变量:
Windows: set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=1024m
Linux: export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=1024m"
2. adding -XX:MaxPermSize=1024M and -XX:PermSize=512M after -vmargs in the eclipse.ini
3. adding -XX:MaxPermSize=1024m and -XX:PermSize=512m to my Tomcat launch configuration
4. add VM arguments on my default JRE as following:Window -> Preferences -> Java -> Installed JREs. Select the checked JRE/JDK and click edit, and set Default VM Arguments = -Xms128m - Xmx1024m -XX:MaxPermSize=1024m
以上四种办法试了个遍,不知道是我打开的方式不对还是怎么回事儿,没有一个起作用,最后按照一篇博文(https://eureka.ykyuen.info/2010/03/02/maven-set-java-heap-memory-for-junit-in-maven-surefire-plugin/)中的设置,在pom.xml中添加参数如下:
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-surefire-plugin</
artifactId
>
<
version
>2.18.1</
version
>
<
configuration
>
<
argLine
>-XX:MaxPermSize=1024m</
argLine
>
</
configuration
>
</
plugin
>
设置完了之后,再次运行mvn test or Run as ->Maven test,顺利跑完整个test。
博文中写到:
JUnit tests ignore the environment variable MAVEN_OPTS and the JVM settings in Run Configurations.
So if u have OutOfMemoryError when running unit test in Maven, you have to set the Java Heap Memory in the maven-surefire-plugin inside the pom.xml.
在Stackoverflow(http://stackoverflow.com/questions/2819853/setting-java-heap-space-under-maven-2-on-windows) 有个post写到:
Basically the JUnits fork off into their own environment and ignore the settings in MAVEN_OPTS. You need to configure surefire in your pom to add more memory for the JUnits.
参考链接:
http://stackoverflow.com/questions/3101128/java-lang-outofmemoryerror-permgen-space-in-maven-build
http://stackoverflow.com/questions/2819853/setting-java-heap-space-under-maven-2-on-windows
https://eureka.ykyuen.info/2010/03/02/maven-set-java-heap-memory-for-junit-in-maven-surefire-plugin/
相关推荐
在Java编程中,`java.lang.ClassNotFoundException` 是一个常见的运行时异常,通常发生在尝试通过类加载器加载指定类时,但找不到对应的字节码文件。在这个特定的问题中,`ClassNotFoundException` 引发的原因是缺少...
在Java开发过程中,经常会在部署或运行时遇到`java.lang.UnsupportedClassVersionError`错误。该错误通常发生在类文件版本与JVM(Java虚拟机)版本不匹配的情况下。本文将详细介绍该错误产生的原因、如何诊断问题...
在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,通常表示尝试加载某个类时,在类路径中找不到该类的定义。在这个特定的场景中,异常堆栈跟踪显示了 `Caused by: java.lang.ClassNotFoundException...
Jacl(Java Command Language)是TCL的一个实现,它允许TCL脚本在Java平台上运行,提供了与Java的紧密集成。SpringSource是一家知名的Java技术提供商,他们为许多开源项目提供了支持,包括这个TCL的Java接口。 "jar...
标题 "test-mvn clean install -Dmaven.test.skip=true dependency:sources" 指的是一个常见的Maven命令,用于构建Java项目。这个命令包含了多个Maven生命周期阶段和插件目标,下面将详细解释这些部分。 1. `mvn ...