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

4

我在使用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变量中时是否已经考虑了优雅性?


这些标志更像是JVM参数而不是编译器参数,不是吗? - Tome
你确定你的JVM支持这些参数吗?是Hotspot还是OpenJDK? - Mike
3个回答

6

根据javac文档:

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

基于以上内容:

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

我很遗憾,这也没有起作用。唯一可能的方法是将其添加到Maven_opts或Eclipse中的VM参数中。仅将其保存到maven-compiler-plugin中并没有帮助。 - feder

1

首先,关于文档中的参数有一个提示。

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

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

这意味着如果您需要它们来构建项目,您必须通过MAVEN_OPTS或在.mavenrc(Linux)或mavenrc_pre.bat(Windows)中定义它们。

JDK 1.7 不支持这些标志,这可能吗?不可能!即使我添加了 compilerArgs,我仍然会收到错误。如果我将这些值添加到默认 VM 参数中,那么它就可以工作了。 - feder
注意fork标志! - khmarbaise
是的,我之前已经切换了那个值。还是出现同样的错误。无论如何,谢谢。 - feder

0

你可以在你的~/.bash_profile中添加

export MAVEN_OPTS=-Xmx512m

就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接