Maven构建中的"java.lang.OutOfMemoryError:PermGen space"

Gan*_*row 183 java out-of-memory permgen maven

我在构建Maven项目时遇到了这个错误,我增加了MAVEN_OPTS,但是我发现了一些类似的帖子,但是他们引用了其他的东西.我该如何解决?

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56)
        at com.sun.tools.javac.comp.Annotate.<init>(Annotate.java:52)
        at com.sun.tools.javac.comp.Annotate.instance(Annotate.java:36)
        at com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:215)
        at com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:168)
        at com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:293)
        at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:72)
        at com.sun.tools.javac.main.Main.compile(Main.java:340)
        at com.sun.tools.javac.main.Main.compile(Main.java:279)
        at com.sun.tools.javac.main.Main.compile(Main.java:270)
        at com.sun.tools.javac.Main.compile(Main.java:87)
        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.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420)
        at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141)
        at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493)
        at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
Run Code Online (Sandbox Code Playgroud)

Aru*_*n R 309

当你说你增加了MAVEN_OPTS,你增加了什么价值?你增加了MaxPermSize,例如:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"
Run Code Online (Sandbox Code Playgroud)

(或在Windows上:)

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m
Run Code Online (Sandbox Code Playgroud)

  • 只是mac/linux用户的注释,只需在〜/ .profile(或类似的文件名)中添加一个导出语句.例如:导出MAVEN_OPTS =" - Xmx512m -XX:MaxPermSize = 256m"...并重新启动shell.为我工作. (19认同)
  • 如果使用命令构建项目,请使用此-DXmx512m -DXX:MaxPermSize = 128m (16认同)
  • 我可以在pom.xml中以某种方式设置此属性吗?我需要让我的构建可移植到不同的环境. (7认同)
  • 他知道.不是他问的 (5认同)
  • 在Unix`export MAVEN_OPTS =" - Xmx512m -XX:MaxPermSize = 128m"` (2认同)

eck*_*kes 23

如果你想让POM的这一部分用于可重复的构建,你可以使用一些插件的fork-variant(特别是编译器:compilesurefire:test):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
      <fork>true</fork>
      <meminitial>128m</meminitial>
      <maxmem>1024m</maxmem>
      <compilerArgs>
        <arg>-XX:MaxPermSize=256m</arg>
      </compilerArgs>
    </configuration>
  </plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18</version>
    <configuration>
        <forkCount>1</forkCount>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • 最好将它放在pom中,以便其他开发人员/环境不会遇到OOME. (3认同)

duf*_*ymo 16

当然,增加烫发空间的大小.使用该-XX:MaxPermSize=128m选项.将值设置为适当的值.