我是Maven来构建我的Java项目。几次成功构建后,我现在收到以下错误:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
在我的构建正在使用的maven.sh文件中,我添加了以下内容作为第一行
export MAVEN_OPTS=-Xmx512m
我仍然收到错误。
有人可以建议修复吗?
答案 0 :(得分:16)
解决方案是将maven-surefire-plugin的forkMode设置为“never”。似乎在运行测试时,maven肯定会生成一个新的JVM。将其设置为永远不会解决问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
**<forkMode>never</forkMode>**
<argLine>-Xms1024m -Xmx1024m -XX:MaxPermSize=2048m</argLine>
<systemPropertyVariables>
<user.name>${user.name}</user.name>
</systemPropertyVariables>
</configuration>
</plugin>
答案 1 :(得分:12)
我有同样的问题,我认为Maven没有使用正确的jvm。您可以使用
进行检查mvn -version
就我而言,我的JAVA_HOME
和PATH
中指定的jvm不正确:我使用的是x86 jdk 6而不是x64 jdk 7.修复此问题解决了这个问题。
答案 2 :(得分:3)
当我尝试构建Cloudera Navigator SDK示例时遇到了同样的问题。我使用的是32位JVM,编译似乎没问题,但之后的测试失败了,出现了这个错误:
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
我尝试设置MAVEN_OPTS = -Xmx512m,但这没有效果 - 它失败并显示相同的消息。甚至错误消息中的值2097152KB仍然是相同的(奇怪!)。
我终于发现堆大小值已经在pom.xml文件中进行了硬编码测试!它有
<argLine>-Xmx2048m ...
</argline>
我编辑了pom.xml并将其更改为-Xmx1024m,然后maven能够毫无问题地构建和测试所有内容。
所以从中得到的教训是,如果你正在构建其他人(例如Cloudera)给你的东西并且你得到这样的错误,请仔细检查pom.xml以查看该设置是否是硬编码的
仅供参考 - 我认为使用64位JVM可能也解决了这个问题,但我无法切换到64位。我们还需要其他一些东西才能使用它,它说它只适用于32位JVM(我不能在这里详细解释)。
答案 3 :(得分:2)
我认为您希望使用以下设置预留更多空间:
MAVEN_OPTS=-Xmx512m
尝试将其设置得更低,因为Maven只有在能够保留整个空间时启动。 这个问题发生在我身上,我可以像描述的那样解决它。
答案 4 :(得分:2)
尝试设置变量: MAVEN_OPTS = -Xmx512m -XX:MaxPermSize = 128m
答案 5 :(得分:2)
更改为MAVEN_OPTS = -Xmx512m帮助我使用Windows 64位。
答案 6 :(得分:1)
尝试Java 64位并将java_home配置为此Java 64。 obs。:javac -version和mvn -version需要返回这个Java 64。
答案 7 :(得分:0)
正如Didier L上面所说的
这正是我遇到的问题,我们运行的是x86 JVM而不是64位......
当我改为64位JVM时,它解决了我的问题。
答案 8 :(得分:0)
在IDEA IntelliJ IDE中,Maven -> Runner
上有一个设置来使用特定的JVM。我的默认设置是使用JRE而不是JAVA_HOME上设置的JDK。务必检查该设置。一旦我切换到使用JAVA_HOME,一切都运行良好。
答案 9 :(得分:0)
我尝试了这个,它适用于我 -
maven版本-3.2.5 java版本-jdk1.7.0_10
-Xmx600m -XX:PermSize = 256m