osx maven 运行测试异常:从线程“main”中的 UncaughtExceptionHandler 抛出的 java.lang.OutOfMemoryError

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24647558/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 13:43:08  来源:igfitidea点击:

osx maven running tests Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

javaandroidmacosmavenrobolectric

提问by RaINqer

I have been trying to run on mac a ready maven project which works under linux. When calling mvn clean installit runs a portion of the tests and then I am getting the following error:

我一直在尝试在 mac 上运行一个在 linux 下运行的现成的 maven 项目。调用 mvn clean install它时会运行一部分测试,然后出现以下错误:

Exception in thread "main" Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

线程“main”中的异常异常:从线程“main”中的 UncaughtExceptionHandler 抛出的 java.lang.OutOfMemoryError

I have seen many questions about Perm gen error fixed with adding MAVEN_OPTSto environmental variables. Right now I have the following environmental variable on my system:

我已经看到许多关于通过添加MAVEN_OPTS环境变量来修复 Perm gen 错误的问题。现在我的系统上有以下环境变量:

MAVEN_OPTS="-Xmx4096m -XX:MaxPermSize=4096m"

MAVEN_OPTS="-Xmx4096m -XX:MaxPermSize=4096m"

When calling mvn help:systemI can see these options showing up in the configuration.

打电话时,mvn help:system我可以看到这些选项出现在配置中。

The project uses Robolectric for testing purposes and (most of the times but not always) prints the following lines before throwing the exception :

该项目使用 Robolectric 进行测试,并且(大多数情况下但并非总是如此)在抛出异常之前打印以下行:

[DEBUG] ********************* **GC'ed SdkEnvironment reused!

[DEBUG] ********************* **GC'ed SdkEnvironment 重用!

[ERROR] couldn't load org.robolectric.internal.ParallelUniverse in org.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53

[错误] 无法在 org.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53 中加载 org.robolectric.internal.ParallelUniverse

In activity monitor I can see a java process come to life when I start the tests. Its memory usage reaches 1.4~1.5GB before the exception is thrown.

在活动监视器中,当我开始测试时,我可以看到一个 java 进程活跃起来。在抛出异常之前,它的内存使用量达到了 1.4~1.5GB。

What else should I do to get it working. Thanks for Your help!

我还应该怎么做才能让它工作。感谢您的帮助!

EDITafter adding the memory options to sure fire plugin :

添加内存选项以确保触发插件后编辑

           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.16</version>
               <configuration>
                   <argLine>-Xmx2048m -XX:MaxPermSize=2048m</argLine>
               </configuration>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.16</version>
               <configuration>
                   <argLine>-Xmx2048m -XX:MaxPermSize=2048m</argLine>
               </configuration>
           </plugin>

and running mvn clean install -e -XI got the following stack trace:

并运行mvn clean install -e -X我得到以下堆栈跟踪:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project android: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: There was an error in the forked process
[ERROR] java.lang.OutOfMemoryError: PermGen space
[ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
[ERROR] at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
[ERROR] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[ERROR] at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
[ERROR] at java.net.URLClassLoader.access0(URLClassLoader.java:71)
[ERROR] at java.net.URLClassLoader.run(URLClassLoader.java:361)
[ERROR] at java.net.URLClassLoader.run(URLClassLoader.java:355)
[ERROR] at java.security.AccessController.doPrivileged(Native Method)
[ERROR] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
[ERROR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
[ERROR] at org.apache.maven.surefire.report.SmartStackTraceParser.getMinimalThrowableMiniMessage(SmartStackTraceParser.java:166)
[ERROR] at org.apache.maven.surefire.report.SmartStackTraceParser.getString(SmartStackTraceParser.java:151)
[ERROR] at org.apache.maven.surefire.report.PojoStackTraceWriter.smartTrimmedStackTrace(PojoStackTraceWriter.java:61)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:328)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:312)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.toString(ForkingRunListener.java:258)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.testError(ForkingRunListener.java:132)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:162)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[ERROR] -> [Help 1]

That's with 2GB of memory for surefire and 4GB for maven.

那是 2GB 的内存用于 Surefire,4GB 用于 maven。

采纳答案by RaINqer

I fixed this problem by adding another magic environmental variable

我通过添加另一个神奇的环境变量解决了这个问题

JAVA_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"

JAVA_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"