如何在maven-compiler-plugin中设置-XX:PermSize = 64m?

时间:2014-11-20 08:56:51

标签: java maven maven-compiler-plugin

我使用maven-compiler-plugin(v3.2)设置permsize或maxpermsize。

我试过这样:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>      
<configuration>
    <meminitial>1024m</meminitial>
    <maxmem>2024m</maxmem>  
    <compilerArgument>-XX:PermSize=128m</compilerArgument>  
</configuration>
</plugin>

导致错误

Caused by: org.codehaus.plexus.compiler.CompilerException: invalid flag: -XX:MaxPermSize=256m -XX:PermSize=128m
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:191)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:785)
    ... 22 more
Caused by: java.lang.IllegalArgumentException: invalid flag: -XX:MaxPermSize=256m -XX:PermSize=128m
    at com.sun.tools.javac.api.JavacTool.processOptions(JavacTool.java:231)
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:199)
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:115)
    ... 24 more

我的另一种尝试是在示例中添加它 http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>      
<configuration>
    <meminitial>1024m</meminitial>
    <maxmem>2024m</maxmem>  
    <compilerArguments>
        <Xms>128m</Xms>
        <Xmx>1024m</Xmx>                        
        <XX:MaxPermSize>256m</XX:MaxPermSize>
        <XX:PermSize>128m</XX:PermSize>                                              
    </compilerArguments>
</configuration>
</plugin>

导致同样的错误:

Caused by: org.codehaus.plexus.compiler.CompilerException: invalid flag: -XX:MaxPermSize
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:191)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:785)
    ... 22 more
Caused by: java.lang.IllegalArgumentException: invalid flag: -XX:MaxPermSize
    at com.sun.tools.javac.api.JavacTool.processOptions(JavacTool.java:231)
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:199)
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:115)
    ... 24 more

那么,为什么这个标志无效?如果在将其添加到MVN_OPTS变量时优雅地考虑它?

3 个答案:

答案 0 :(得分:4)

来自javac文档:

  

-Joption       将选项传递给javac调用的java启动程序。例如,-J-Xms48m将启动内存设置为48兆字节。

基于以上所述:

<compilerArgs>
  <arg>-J-XX:PermSize=128m</arg>
  <arg>-J-XX:MaxPermSize=256m</arg>
</compilerArgs>

答案 1 :(得分:1)

首先有一个关于the parameters in the docs

的提示
  

如果fork设置为,则设置要传递给编译器的参数   真正。例如:

<compilerArgs>
  <arg>-Xmaxerrs=1000</arg>
  <arg>-XX:PermSize=128m</arg>
</compilerArgs>

这意味着如果你需要它们来构建,你必须通过MAVEN_OPTS或者你可以在.mavenrc(linux)或mavenrc_pre.bat(Windows)中定义它们。

答案 2 :(得分:0)

您只需添加

即可

export MAVEN_OPTS=-Xmx512m

你的〜/ .bash_profile

中的