Ответ 1
По умолчанию <javac>
запускается в процессе с помощью Ant. Общее ограничение Java не позволяет настроить процесс JVM Xms
и Xmx
после запуска JVM-процесса. Таким образом, сообщение об ошибке, которое вы видите, - это программное обеспечение, отклоняющее вашу попытку нарушить этот принцип (используя бесполезное, недружелюбное сообщение об ошибке).
Если, однако, вы указываете атрибут fork="true"
в теге <javac>
, вы сможете указать новые Xms
и Xms
. Это связано с тем, что fork
инструктирует Ant запустить новый подпроцесс JVM для запуска javac
. Поскольку процесс JVM является новым, он дает Ant приемлемую возможность указать для него Xms
и Xmx
.
Вы можете попробовать что-то вроде этого:
<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 будет ждать выхода forked <javac>
, что происходит после завершения процесса javac
его работы (т.е. компиляции). Ant затем продолжает выполнение сборки script внутри своего собственного исходного процесса JVM. Ant проверяет, не удалось или не удалось разбить forked javac
, и принять обычные действия на основе этой информации.
Производительность
Как правило, он более неактивен для не fork javac
, а вместо этого просто настраивает соответствующие параметры памяти для первоначальной общей версии Ant JVM. Это часто (но не всегда) лучший выбор, потому что запуск отдельной JVM обычно медленнее и занимает больше памяти, чем просто позволяет javac
запускать процесс.
Если вы используете Ant -provided ant.bat
или ant.sh
для запуска Ant, простой способ настроить Ant Xms
и Xmx
- это определить переменную среды ANT_OPTS, которая должна содержать аргументы, которые вы хотите. Там много способов установить переменные среды, но вы можете просто изменить ant.bat
:
set ANT_OPTS=-Xms128m -Xmx512m