【问题标题】:Config Maven 2 to print out javac commands during compile phase配置 Maven 2 以在编译阶段打印出 javac 命令
【发布时间】:2010-02-05 19:57:27
【问题描述】:

有什么方法可以强制 Maven 2 (>2.0.10) 打印它正在执行的实际 javac 命令。即使我们使用 MAVEN_OPTS 提高了最大值,我们仍然会耗尽内存。我希望能够看到内存不足的实际正在执行的命令。

我尝试在 pom 文件的插件管理部分使用下面的详细设置,但这似乎没有给我 javac 命令:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
        <maxmem>1024m</maxmem>
        <compilerArguments>
            <verbose/>
        </compilerArguments>
    </configuration>
</plugin>

【问题讨论】:

    标签: java maven-2 maven javac


    【解决方案1】:

    您是否尝试过使用-X 命令运行 Maven 来打印调试信息?

    $ mvn -?
    ...
     -X,--debug      Produce execution debug output
    

    maven-javac-plugin 应该会打印出正在使用的类路径、源目录/路径等。

    【讨论】:

    • 嗯。这并没有给我 javac 命令,但它确实告诉我传递给命令的 maxmem 没有注意 MAVEN_OPTS 中设置的内容。它也没有注意在编译器插件配置部分中设置的 maxmem pom 文件。
    • 我想你想用M2_OPTS
    • 正确的环境变量是 MAVEN_OPTS,例如 MAVEN_OPTS=-Xmx1024m。 pom 中的 maxmem 配置仅适用于将编译器插件设置为将 javac 分叉到新 jdk 时。否则,插件在与 Maven 相同的 Jdk 中运行,因此在通过 MAVEN_OPTS 在 cli 上传递的内存中。
    • @Brian Fox,使用价值高得离谱的 MAVEN_OPTS 仍然无法正常工作。如上所述,我最终不得不将编译器插件设置为 fork。从我对这种情况的有限测试来看,某些东西似乎耗尽了 Maven 的大部分内存占用,因此当它尝试编译(非分叉)时它会失败。我们将不得不在我们这边做更多的研究,以确定构建过程的哪个部分占用了这么多内存。..
    • 您可以尝试为“HeapDumpOnOutOfMemoryError”(java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/clopts.html) 启用 JVM 参数,然后通过任何分析器工具运行堆转储(我喜欢 Eclipse 内存分析器)
    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2012-09-17
    • 2012-10-21
    • 2011-03-23
    • 2019-09-28
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多