【问题标题】:Maven Ant deploy - OutOfMemoryError: Java heap spaceMaven Ant 部署 - OutOfMemoryError:Java 堆空间
【发布时间】:2012-06-21 17:29:56
【问题描述】:

场景

在使用 Maven Ant 任务 artifact:deploy 时,我遇到了错误 java.lang.OutOfMemoryError: Java heap space

只有在部署的文件大小大于 25 MB 时才会出现错误。我的工件大小不超过 50 MB。

原因可能是什么?还有,我能做些什么来解决它?


代码 sn-p

        <artifact:deploy file="@{app.name}.jar">
            <pom file="@{pom.file}"/>               

            <remoteRepository url="http://xxx.com:xxx/xxx-webapp/content/repositories/xxx-releases/">
                <authentication username="xxx" password="xxx" />
            </remoteRepository>
        </artifact:deploy>


现有解决方案

大多数在线结果表明这与 JVM 默认堆大小有关,可以通过设置适当的环境变量来修复。

但是,我希望 Ant 脚本可以在任何计算机上运行,​​并且不依赖环境变量。

有没有办法在 Ant 脚本或 POM 文件?

编辑

install-provider 任务 (http://maven.apache.org/ant-tasks/examples/install-deploy.html) 似乎对某些人有用。我使用它时不断收到下载错误。


回答

事实证明,当我在另一台机器上运行我的 Maven Ant 任务(可能有更多的内存分配给 JVM 堆)时,我没有收到 Java 堆错误。因此,我没有尝试过@Attila 提到的解决方案,尽管它似乎朝着正确的方向发展。

【问题讨论】:

    标签: maven ant out-of-memory heap-memory pom.xml


    【解决方案1】:

    一旦 ant 运行,您就无法更改 JVM 运行 ant 的堆大小。因此,您唯一的选择是在单独的 JVM 中运行消耗大量内存的任务,并指定足够的堆空间。请注意,这依赖于允许您fork一个新的 JVM 来执行任务的任务

    更新:我找不到指定 fork maven(部署)任务的方法,但this page 指定了如何定义宏以使用 java 任务(请注意,这依赖于机器上安装和正确配置的 maven beeing)(请参阅“使用 Java 任务”部分)

    【讨论】:

    • 大小不超过 50 MB 的工件是否需要该选项?我假设可能有一种更简单的方法来处理它......
    • 根据所涉及的内容,构建有时会占用惊人的内存量——不幸的是我不熟悉 maven 任务,所以不知道是否有更简单的方法
    【解决方案2】:

    请尝试增加虚拟机内存,例如:-Xmx512m 如果您使用的是 ANT,您可以将其添加到 ANT_OPTS 环境变量中:ANT_OPTS="-Xmx512m"

    【讨论】:

    • 我想要一些不需要我依赖更改环境变量的东西。我的脚本应该可以在任何机器上运行,而无需更改机器环境配置。
    • 您可以尝试将其添加到bat文件中,例如:ANT_OPTS="-Xmx512m" CALL ant -q -f ...
    • 批处理文件的问题在于它会特定于环境,也不是最干净的方法。我想知道是否可以将任何内容添加到 Ant 脚本或 POM 文件中。
    • 所以,你需要在运行时更改虚拟机内存,但这是不可能的:) 抱歉。
    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2019-03-06
    • 2015-08-25
    • 2021-02-13
    • 2012-10-09
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多