gpt4 book ai didi

java - Ant:将编译器参数传递给 javac

转载 作者:IT老高 更新时间:2023-10-28 21:11:29 33 4
gpt4 key购买 nike

我有可以编译的 ant 脚本:

            <javac srcdir="${test.src.dir}" destdir="${test.dist.dir}">
...
<compilerarg value="-Xlint:unchecked" />
</javac>

我需要增加编译器的堆内存,所以我将以下参数放入compileargs:

<compilerarg value="-Xlint:unchecked -Xms128m -Xmx512m" />

但我在控制台中收到错误:

[javac] javac: invalid flag: -Xms128m
[javac] Usage: javac <options> <source files>

为什么会这样?如何增加 javac 使用的内存?

最佳答案

默认情况下,<javac>与 Ant 在进程内运行。 Java 的一般限制是不能调整 JVM 进程'XmsXmx一旦该JVM进程启动。因此,您看到的错误消息是软件拒绝您尝试违反此原则(使用无用、不友好的错误消息。)

但是,如果您指定属性 fork="true"<javac>标记您能够指定一个新的XmsXms .这是因为 fork指示 Ant 启动一个新的 JVM 子进程,在其中运行 javac .因为 JVM 进程是新的,它给了 Ant 一个可接受的机会来指定 XmsXmx为它。


你可以试试这样的:

<project name="project" default="all" basedir="[yourvalue]">
<target name="all">
<javac srcdir="[yourvalue]" destdir="[yourvalue]" fork="true">
<!-- javac requires that -Xmx and -Xms be prefixed with -J -->
<compilerarg line="-J-Xms128m -J-Xmx512m" />
</javac>
</target>
</project>

(注意我使用的是 compilerarg line="" 而不是 compilerarg value=""line 属性允许您指定多个以空格分隔的参数。value 属性用于传递单个参数。)


Ant 将等待 fork <javac>退出,这发生在 javac 之后进程完成其工作(即编译)。 Ant 然后继续在它自己的原始 JVM 进程中运行构建脚本。 Ant 会检查 fork 的 javac失败或成功,并根据此信息采取通常的措施。


性能

fork javac 通常性能更好,而是简单地调整初始 Ant JVM 的相关内存设置。这通常(但不总是)是最佳选择,因为启动单独的 JVM 通常比简单地允许 javac 更慢并且占用更多内存。在进程中运行。

如果您使用的是 Ant 提供的 ant.batant.sh启动 Ant,这是一种调整 Ant 的简单方法 XmsXmx就是定义环境变量 ANT_OPTS 来包含你想要的参数。有很多方法可以设置环境变量,但你可以编辑ant.bat :

set ANT_OPTS=-Xms128m -Xmx512m

关于java - Ant:将编译器参数传递给 javac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4134803/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com