这个问题需要一些背景故事......在我的公司,我们制作了一组 PDF 和 HTML 文件。非常大的一套。当前的构建过程(我匆忙设计的)是一个 Perl 脚本,它读取一组文件,其中每个文件都包含一个要执行的新 ant 命令。

它的设计非常糟糕。

现在,我正在尝试将整个项目转移到使用 ant 来完成大部分任务。在目标中,我可以构建需要构建的文件列表,如 PDF 或 HTML。但是,当我调用 ant 命令来构建每个文件时,在大约 3 次构建(比如 5 次)之后,整个过程会因 OutOfMemory 错误而崩溃。此外,我的 buildlog.xml 最终变成了大约 20 megs——它将每个 ant 命令的输出连接到一个巨大的日志中,因为它们是从单个目标调用的。使用早期的 Perl 解决方案,我能够为每个 ant 命令获得一个 buildlog.xml —— 只需将 buildlog 保存并重命名为其他内容。

即使我在 user.properties 中设置了 ant 或 java 堆大小,我最终仍然会因 OOM 而失败。我想知道是否合适的解决方案是调用 <exec> 来启动一个脚本,该脚本执行我所描述和希望的一些操作:即调用 ant,重命名构建日志,然后死——理论上比一个“巨型” Ant 更好地分配和释放空间称呼。我担心我将采用另一个“hacky”解决方案来解决一个定义明确的问题,并且可以完全局限于 ant。再说一次,<exec> 确实存在是有原因的,所以我不应该因为使用它而感到难过吗?

最佳答案

对于大多数企业软件(至少那些有截止日期的软件,如果您没有,请告诉我您的工作地点,以便我可以尝试在那里找到工作),第一步是让它工作。

然后,担心让它正常工作。

对于第一步,您可以使用任何可用的工具,无论您认为它看起来多么丑陋。

但是您可能想要确保权力知道您必须做各种繁琐的事情才能使其为他们工作,以便他们让您有希望在维护开始之前修复它它。您可能不想维护一个丑陋的代码库或设计。

我们已经在世界上释放了这样的奇迹,例如应用程序每晚关闭自己以避免内存泄漏(让操作系统重新启动它们),将“有问题的”代码放在 TCP 套接字的另一端,这样它们的崩溃就不会导致崩溃主要应用程序,我敢肯定,我的大脑已决定删除所有其他恐怖事件。

关于ant - exec 是 ant OutOfMemory 问题的一个很好的编程解决方案吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4720162/

10-13 09:54