Java 即使在增加内存后,OutOfMemory异常(Maven)
当我尝试将Apache Stanbol安装为本地实例时,出现以下异常:Java 即使在增加内存后,OutOfMemory异常(Maven),java,maven,Java,Maven,当我尝试将Apache Stanbol安装为本地实例时,出现以下异常: ERROR] Java heap space -> [Help 1] java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2786) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94) at aQ
ERROR] Java heap space -> [Help 1]
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at aQute.lib.osgi.EmbeddedResource.copy(EmbeddedResource.java:62)
at aQute.lib.osgi.EmbeddedResource.collect(EmbeddedResource.java:51)
at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:33)
at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:71)
at aQute.lib.osgi.Verifier.getBundleClassPath(Verifier.java:255)
at aQute.lib.osgi.Verifier.<init>(Verifier.java:204)
at aQute.lib.osgi.Builder.doVerify(Builder.java:434)
at aQute.lib.osgi.Builder.build(Builder.java:104)
at org.apache.felix.bundleplugin.BundlePlugin.buildOSGiBundle(BundlePlugin.java:547)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:347)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:264)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError
我已经使用下面的命令增加了JVM内存,但是仍然得到了相同的错误。我的内存是4GB
导出MAVEN_OPTS=-Xmx3000m-XX:MaxPermSize=512m
如何排除故障并修复此问题
谢谢,
Jay增加内存并不是OOM错误的解决方案。它可以是暂时的缓解,但不是永久的解决办法。您需要修复导致内存泄漏的代码 从异常情况来看,似乎有一些代码复制数组并递归地执行,从而导致堆内存溢出
要设置的环境变量是MAVEN_OPTS,例如MAVEN_OPTS=-Xmx1024m。pom中的maxmem配置仅在将编译器插件设置为将javac分叉到新JVM中时适用。否则,插件将在与Maven相同的VM中运行,从而在通过Maven_OPTS在命令行上传递的内存中运行 要在Windows 7下设置MAVEN_选项: 右键单击我的计算机并选择属性 单击系统属性左侧导航中的“高级系统设置”链接以显示高级系统属性 转到“高级”选项卡,然后单击位于“高级系统属性配置”窗口底部的“环境变量”按钮 创建一个新的用户变量,将变量名设置为MAVEN_OPTS,并将变量值设置为-Xmx1024m或更高
打开一个新的命令窗口并运行mvn。在OSGI环境中,当您在构建过程中进行了大量的资源筛选,并且没有足够的堆空间分配给Maven时,就会发生这种情况 如果你像这样指定你的资源和过滤器,应该可以解决这个问题
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/filtered-resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>src/main/etc/org.yourcompany.yourproject.cfg</filter>
</filters>
注意:过滤器文件是以.cfg结尾的指定文件
如果没有此选项,则在尝试解析资源令牌时将出现OutOfMemory错误。因此,嵌入式资源数组复制
你的Java版本是什么?在32位system for Java中,不能分配超过1.5Gb的内存。同时,我还没有看到任何如此庞大的应用程序需要超过1Gb。看来你的?buggy?插件需要的远不止这些。要么获得更多内存,要么记录一个bug来修复插件。顺便说一句,现在4GB并没有那么多,但是maven插件应该不需要这么多。