попередження мурашника: "" включати час виконання "не встановлено"


397

Я отримую таке попередження:

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

Що це означає?

Відповіді:


388

Мураха Виконання

Просто встановіть 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, щоб поведінка сценарію не була чутливою до середовища, в якому він виконується.


Apache Ant (TM) версії 1.8.2, складеного 20 грудня 2010 року
user496949

тому, якщо вам потрібен час виконання мурашника на classpath, встановіть його так / true, в іншому випадку немає / false. я думаю, вам це не потрібно.
Даніель Кутік

5
+1, чудова відповідь. Я просто хочу, щоб я міг встановити це колись десь у складальному файлі замість засмічення кожного дзвінка javac з ним ...
Jonik

1
Який випадок встановлено на True?
Лоренцо Лерате

"Чи включати бібліотеки часу запуску Ant в класний шлях; за замовчуванням - так, якщо не встановлено build.sysclasspath. Зазвичай, найкраще встановити це значення false, щоб поведінка сценарію не була чутливою до середовища, в якому він працює. "
Даніель Кутік

72

Як згадував @Daniel Kutik, presetdefце хороший варіант. Особливо, якщо хтось працює над проектом з багатьма build.xmlфайлами, які не можна або не бажає редагувати (наприклад, файли від сторонніх осіб).

Для використання presetdefдодайте ці рядки у файл верхнього рівня build.xml:

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

Тепер усі наступні javacзавдання по суті будуть успадковані includeantruntime="false". Якщо вашим проектам дійсно потрібні бібліотеки виконання програми, ви можете або додати їх явно до файлів збирання АБО набору 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застосовуватимуться в усьому світі, придушуючи попередження мимоволі у всіх ваших проектах


1
Відмінно підходить для переобладнання існуючого файлу збірки Ant з кількома завданнями javac. Елемент presetdef знаходиться безпосередньо всередині проекту.
saxman

@jwfearn: Чи можна зробити подібний presetdefтрюк для роботи над невбудованими завданнями Ant? Я спробував це scalac, але оскільки build.xmlфайли нижнього вниз повинні визначати scalacзавдання вручну , вони переосмислюють все, що я встановив на верхньому рівні.
Стюарт Голодець

2
Зауважте, що використання presetdef викличе мурашине попередження про те, що завдання javac було переглянуто. Додавання включеного часу виконання кожного завдання javac уникає цього. Мені невідомі недоліки попередження. Але це може бути корисно для людей, яким «потрібні» чисті конструкції.
mikijov

Так, пресет дає "Спроба переосмислити старе визначення завдання javac"
Майк Джонс

62

Chet Hosey написав гарне пояснення тут :

Історично склалося, що Мураха завжди включав власну тривалість роботи в класний шлях, який був доступний для завдання javac. Тож будь-які бібліотеки, що входять до Ant, і будь-які бібліотеки, доступні для мурахи, автоматично перебувають у класі вашого збірника, подобається вам це чи ні.

Було вирішено, що це, мабуть, не те, чого хоче більшість людей. Тож тепер є варіант для цього.

Якщо ви вибрали "true" (для включення під час виконання), то принаймні ви знаєте, що ваш клас збирання буде включати час виконання мурашки. Якщо ви вибрали "false", ви приймаєте той факт, що поведінка збірки зміниться між старими версіями та 1.8+.

Як би роздратовано, як ви бачите це попередження, ви були б ще менш щасливі, якби ваші збірки повністю зламалися. Дотримання цієї поведінки за замовчуванням дозволяє незмінним файлам збирання послідовно працювати між версіями Ant.


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) для мурашника в затемненні. Я встановлюю це оновлення. саме зараз мій мурашиний проект - це успіх у побудові.

Спробуйте, сподіваюся, це буде корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.