Я получаю следующее предупреждение:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Что это значит?
Я получаю следующее предупреждение:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Что это значит?
Ответы:
Просто установите includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Если вам нужно использовать javac
-task несколько раз, вы можете рассмотреть возможность использования PreSetDef
своей собственной javac
-task, которая всегда устанавливается includeantruntime="false"
.
С http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Это вызвано ошибкой в версии 1.8. Просто добавьте атрибут с таким именем в задачу javac, установите для него значение false и забудьте, что это когда-либо происходило.
С http://ant.apache.org/manual/Tasks/javac.html :
Включать ли библиотеки времени выполнения Ant в classpath; по умолчанию да, если не установлен build.sysclasspath. Обычно лучше установить значение false, чтобы поведение скрипта не зависело от среды, в которой он запущен.
Как отметил @Daniel Kutik, presetdef
это хороший вариант. Особенно, если вы работаете над проектом со многими build.xml
файлами, которые нельзя или не хотите редактировать (например, от сторонних разработчиков).
Чтобы использовать presetdef
, добавьте эти строки в ваш build.xml
файл верхнего уровня :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Теперь все последующие javac
задачи будут по существу наследоваться includeantruntime="false"
. Если вашим проектам действительно нужны библиотеки времени выполнения ant, вы можете явно добавить их в файлы сборки или установить includeantruntime="true"
. Последний также избавится от предупреждений.
Последующие javac
задачи могут все еще явно изменить это при желании, например:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Я бы рекомендовал против использования ANT_OPTS
. Это работает, но это побеждает цель предупреждения. Предупреждение говорит о том, что в другой системе сборка может вести себя по-другому. Использование ANT_OPTS
делает это еще более вероятным, потому что теперь каждая система должна использовать ANT_OPTS
одинаково. Кроме того, ANT_OPTS
будет применяться глобально, подавляя предупреждения волей-неволей во всех ваших проектах
presetdef
трюк для не встроенных задач Ant? Я пытался это сделать scalac
, но поскольку нижние build.xml
файлы должны вручную определять scalac
задачу, они переопределяют все, что я установил на верхнем уровне.
Чет Хоси написал хорошее объяснение здесь :
Исторически Ant всегда включал свою собственную среду выполнения в путь к классам, доступный для задачи javac. Таким образом, любые библиотеки, включенные в Ant, и любые библиотеки, доступные для ant, автоматически попадают в путь к классу вашей сборки, нравится вам это или нет.
Было решено, что это, вероятно, не то, что хотели большинство людей. Так что теперь есть вариант для этого.
Если вы выберете «true» (для includeantruntime), то, по крайней мере, вы знаете, что ваш путь к классу сборки будет включать среду выполнения Ant. Если вы выберете «false», то вы принимаете тот факт, что поведение сборки будет меняться между старыми версиями и 1.8+.
Как бы вы ни были раздражены, увидев это предупреждение, вы были бы еще менее счастливы, если бы ваши сборки полностью сломались. Сохранение этого поведения по умолчанию позволяет неизменным файлам сборки работать согласованно между версиями Ant.
Ответ от Даниэля работает просто отлично. Вот пример фрагмента, который я добавил в свой build.xml:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ -->
<classpath>
<path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
<path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
</classpath>
</javac>
</target>
Если вы хотите, чтобы я работал из командной строки, быстрый ответ выполняется
export ANT_OPTS=-Dbuild.sysclasspath=ignore
А затем снова запустите свой сценарий муравья.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
Я столкнулся с этим же, я проверяю в программе и функции. было установлено обновление для jdk1.8, которое несовместимо с моими старыми настройками (jdk1.6.0) для ant в eclipse. Я устанавливаю это обновление. Прямо сейчас мой муравейный проект - это успех сборки.
Попробуйте, надеюсь, это будет полезно.