предупреждение муравья: «includeantruntime» не был установлен » - PullRequest
391 голосов
/ 24 февраля 2011

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

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

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

Ответы [ 7 ]

384 голосов
/ 24 февраля 2011

Ant Runtime

Просто установите includeantruntime="false":

<javac includeantruntime="false" ...>...</javac>

Если вам нужно использовать javac -задачу несколько раз, возможно, вы захотите использовать PreSetDef, чтобы определить собственную javac -задачу, которая всегда устанавливает 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 не является задавать. Обычно лучше установить это ложь, поэтому поведение сценария не чувствительны к окружающей среде, в которой он запущен.

69 голосов
/ 14 ноября 2011

Как отметил @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 будет применяться глобально, подавляя предупреждения волей-неволей во всех ваших проектах

61 голосов
/ 24 февраля 2011

Чет Хоси написал хорошее объяснение здесь :

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

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

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

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

26 голосов
/ 18 августа 2011

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

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

Для более подробной информации includeAntRuntime в Муравей Javac

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

5 голосов
/ 19 сентября 2011

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

export ANT_OPTS=-Dbuild.sysclasspath=ignore

, а затем снова запустите сценарий ant.

0 голосов
/ 12 декабря 2015

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

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

...