муравьиное предупреждение: «includeantruntime» не был установлен »

397

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

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

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

user496949
источник

Ответы:

388

Ant Runtime

Просто установите 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, чтобы поведение скрипта не зависело от среды, в которой он запущен.

Даниэль Кутик
источник
Apache Ant (TM) версия 1.8.2, скомпилированная 20 декабря 2010 г.
user496949
поэтому, если вам нужна среда выполнения ant в пути к классам, установите для нее значение yes / true, иначе - нет / false. Я думаю, тебе это не нужно.
Даниэль Кутик
5
+1, Отличный ответ. Я просто хотел бы установить это однажды где-нибудь в buildfile вместо того, чтобы засорять каждый вызов javac этим ...
Jonik
1
Что в любом случае это установлено в True?
Лоренцо Лерате
«Нужно ли включать библиотеки времени выполнения Ant в classpath; по умолчанию - yes, если не указан build.sysclasspath. Обычно лучше установить значение false, чтобы поведение сценария не зависело от среды, в которой он запущен. "
Даниэль Кутик
72

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

jwfearn
источник
1
Отлично работает для дооснащения существующего файла сборки Ant с несколькими задачами javac. Элемент presetdef находится внутри элемента проекта.
саксман
@jwfearn: можно ли сделать подобный presetdefтрюк для не встроенных задач Ant? Я пытался это сделать scalac, но поскольку нижние build.xmlфайлы должны вручную определять scalacзадачу, они переопределяют все, что я установил на верхнем уровне.
Стюарт Голодец
2
Обратите внимание, что использование presetdef вызовет предупреждение муравья о том, что задача javac была переопределена. Addind includeantruntime для каждой задачи javac позволяет избежать этого. Я не осведомлен о недостатках этого предупреждения. Но это может быть полезно для людей, которым «нужны» чистые сборки.
Михиков
Да, presetdef выдает «Попытка переопределить старое определение задачи javac»
Майк Джонс
62

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

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

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

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

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

kgiannakakis
источник
3
Я всегда думал, что это была самая глупая функция / сообщение когда-либо. Кому нужны «повторяющиеся сборки» в их инструменте управления конфигурацией? ;)
Кармаказе
1
Этот ответ, кажется, единственный, который говорит нам, что на самом деле означает предупреждение.
Ты
26

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

А затем снова запустите свой сценарий муравья.

Слотт
источник
Это мне очень помогает . Я использую set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.
Пол Варгас
5

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

Для получения более подробной информации искать includeAntRuntimeв Ant Javac

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

Ахмад Надим
источник
-3

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

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

Гарун Кумар Мишра
источник