java.lang.OutOfMemoryError:Maven中的Java堆空间

当我运行maventesting,java.lang.OutOfMemoryError发生。 我谷歌的解决scheme,并试图export MAVEN_OPTS=-Xmx1024m ,但它没有奏效。 任何人都知道这个问题的其他解决scheme,BTW我使用的是Maven 3.0

提前致谢

在运行“mvn test -e”时将错误消息粘贴在这里

testing失败:
  警告(junit.framework.TestSuite $ 1)
   testDefaultPigJob_1(com.snda.dw.pig.impl.DefaultPigJobLocalTest)
   testDefaultPigJob_2(com.snda.dw.pig.impl.DefaultPigJobLocalTest)

testing运行:11,失败:3,错误:0,跳过:0

 10/11/01 13:37:18 INFO executionengine.HExecutionEngine:连接到hadoop fi
文件系统:///
 [INFO] ----------------------------------------------- -------------------------
 [信息]build设失败
 [INFO] ----------------------------------------------- -------------------------
 [信息]总时间:30.063s
 [INFO]完成于:Mon Nov 01 13:37:18 PDT 2010
 [INFO]最终记忆:3M / 6M
 [INFO] ----------------------------------------------- -------------------------
 [错误]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2。
 5:项目dw.pigtesting(默认testing):有testing失败。
 [错误]
 [错误]请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports fo
 r个人testing结果。
 [错误]  - > [帮助1]
 org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标o
 rg.apache.maven.plugins:maven-surefire-plugin:2.5:testing(默认testing)项目
  dw.pig:有testing失败。

请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports
个别testing结果。
        在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
的.java:199)
        在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
的.java:148)
        在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
的.java:140)
        在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
 CT(LifecycleModuleBuilder.java:84)
        在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
 CT(LifecycleModuleBuilder.java:59)
        在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
 ILD(LifecycleStarter.java:183)
        在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
 eStarter.java:161)
        在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:314)
        在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:151)
        在org.apache.maven.cli.MavenCli.execute(MavenCli.java:445)
        在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168)
        在org.apache.maven.cli.MavenCli.main(MavenCli.java:132)
        在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)
        在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。
 Java的:39)
        在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
 sorImpl.java:25)
        在java.lang.reflect.Method.invoke(Method.java:597)
        在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun
 cher.java:290)
        在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
一:230)
        在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
 uncher.java:409)
        在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
 352)
引起:org.apache.maven.plugin.MojoFailureException:有testing失败
 。

请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports
个别testing结果。
        在org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugi
 n.java:629)
        在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(默认
 BuildPluginManager.java:107)
        在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
的.java:195)
         ...更多
 [错误]
 [错误]使用-X开关重新运行Maven以启用完整的debugging日志logging。
 [错误]
 [错误]有关错误和可能的解决scheme的更多信息,请注意
 d以下文章:
 [错误] [帮助1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

当我运行maventesting,java.lang.OutOfMemoryError发生。 我谷歌的解决scheme,并试图导出MAVEN_OPTS = -Xmx1024m,但它没有奏效。

使用MAVEN_OPTS设置Xmx选项确实有效,它configuration了用来启动Maven的JVM。 话虽如此,maven-surefire插件默认分叉一个新的JVM,因此你的MAVEN_OPTS不会被传递。

要configurationmaven-surefire-plugin使用的JVM的大小,您必须:

  • forkMode改为never (这不是一个好主意,因为Maven不会被隔离在testing中)〜或者〜
  • 使用argLine参数(正确的方法):

在后面的情况下,这样的事情:

 <configuration> <argLine>-Xmx1024m</argLine> </configuration> 

但是我不得不说,在这里我倾向于同意斯蒂芬的观点,你的testing很有可能出了问题,我不确定给予更多的回忆是“解决”(隐藏)你的问题的正确解决scheme。

参考

  • Maven 2 Surefire插件
  • 在Maven Surefire中的类加载和分叉

对于那些新来的Maven(像我一样),这里是你的pom的构build部分的整个configuration。 干杯。

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <configuration> <argLine>-Xmx1024m</argLine> </configuration> </plugin> </plugins> </build> 

问题出在您要求Maven运行的unit testing之一。

因此,摆弄堆大小是错误的方法。 相反,您应该查看导致OOME的unit testing,并试图弄清楚是unit testing还是testing代码的错误。

从查看堆栈跟踪开始。 如果没有,使用-e选项再次运行mvn ... test

我通过两种方式解决了这个问题:

  1. 在pom.xml中添加这个configuration

     <configuration><argLine>-Xmx1024m</argLine></configuration> 
  2. 切换到使用JDK 1.7而不是1.6

为了暂时解决这个问题,我发现以下是最快的方法:

 export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m" 

设置环境variables:

MAVEN_OPTS = “ – Xmx1024m”

不仅堆积内存。 也增加perm的大小来解决这个maven的exception在环境variables中使用这些variables。

 variable name: MAVEN_OPTS variable value: -Xmx512m -XX:MaxPermSize=256m 

例如:

 export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"