Ant предупреждение: "'includeantruntime' не установлен"

Я получаю следующее предупреждение:

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

Что это значит?

Ответ 1

Ant Время выполнения

Просто установите 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:

Это вызвано неправильной работой введенный в Ant 1.8. Просто добавьте атрибут этого имени для javac задайте значение false и забудьте об этом когда-либо случалось.

Из http://ant.apache.org/manual/Tasks/javac.html:

Включить ли Ant время выполнения библиотеки в пути к классам; по умолчанию да, если build.sysclasspath не является задавать. Обычно лучше всего установить это false, поэтому поведение script не является чувствительных к окружающей среде, в которых он запускается.

Ответ 2

Как отметил @Даниэль Кутик, presetdef - хороший вариант. Особенно, если вы работаете над проектом со многими build.xml файлами, которые нельзя или предпочитает не редактировать (например, из сторонних сторон.)

Чтобы использовать presetdef, добавьте эти строки в файл верхнего уровня build.xml:

  <presetdef name="javac">
    <javac includeantruntime="false" />
  </presetdef>

Теперь все последующие задачи javac будут по существу наследовать includeantruntime="false". Если вашим проектам действительно нужны библиотеки ant runtime, вы можете либо добавить их явно в свои файлы сборки, либо установить 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 будет применяться во всем мире, подавляя предупреждения во всех ваших проектах

Ответ 3

Chet Hosey написал приятное объяснение здесь:

Исторически, Ant всегда включал собственную среду выполнения в путь класса, доступный для задачи javac. Поэтому любые библиотеки, включенные в Ant, и любые библиотеки, доступные для Ant, автоматически находятся в вашем пути к классу сборки, нравится вам это или нет.

Было решено, что это, вероятно, не то, что хотели большинство людей. Так что теперь есть вариант для этого.

Если вы выберете "true" (для includeantruntime), то, по крайней мере, вы знаете, что ваш путь к классу сборки будет включать время выполнения Ant. Если вы выберете "false", вы принимаете тот факт, что поведение сборки изменится между более старыми версиями и 1,8 +.

Как раздражает, когда вы увидите это предупреждение, вы были бы еще менее счастливы, если бы ваши сборки полностью сломались. Сохранение этого поведения по умолчанию позволяет неизмененным файлам сборки работать последовательно между версиями Ant.

Ответ 4

Ответ от Даниэля работает просто отлично. Вот пример фрагмента, который я добавил в свой файл 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>

Ответ 5

Если вам нравится работать с командной строкой, быстрый ответ выполняется

export ANT_OPTS=-Dbuild.sysclasspath=ignore

И затем снова запустите свой ant script.

Ответ 6

Используйте <property name="build.sysclasspath" value="last"/> в файле build.xml

Подробнее... includeAntRuntime в Ant javac

Другие возможные значения можно найти здесь

Ответ 7

i столкнулся с этим, я зарегистрирую программу и функцию. было установлено обновление для jdk1.8, которое несовместимо с моей старой настройкой (jdk1.6.0) для ant в eclipse. Я устанавливаю это обновление. прямо сейчас, мой проект ant - это успех сборки.

Попробуйте, надеюсь, это будет полезно.