advertencia de hormiga: “no se configuró ‘includeantruntime'”

6 minutos de lectura

avatar de usuario
usuario496949

Recibo la siguiente advertencia:

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

¿Qué significa esto?

avatar de usuario
daniel kutik

Tiempo de ejecución de hormigas

Simplemente configura includeantruntime="false":

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

Si tienes que usar el javac-tarea varias veces que tal vez quieras considerar usar PreSetDef para definir el tuyo javac-tarea que siempre establece includeantruntime="false".

Detalles adicionales

De http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:

Eso es causado por una falla introducida en Ant 1.8. Simplemente agregue un atributo de ese nombre a la tarea javac, configúrelo como falso y olvide que alguna vez sucedió.

De http://ant.apache.org/manual/Tasks/javac.html:

Si incluir las bibliotecas de tiempo de ejecución de Ant en el classpath; el valor predeterminado es sí, a menos que se establezca build.sysclasspath. Por lo general, es mejor establecer esto en falso para que el comportamiento del script no sea sensible al entorno en el que se ejecuta.

  • Apache Ant(TM) versión 1.8.2 compilada el 20 de diciembre de 2010

    – usuario496949

    24 de febrero de 2011 a las 10:40


  • por lo tanto, si necesita el tiempo de ejecución de ant en el classpath, configúrelo en sí/verdadero; de lo contrario, en no/falso. Supongo que no lo necesitas.

    – Daniel Kutik

    24 de febrero de 2011 a las 10:46

  • +1, gran respuesta. Ojalá pudiera configurar eso una vez en algún lugar del archivo de compilación en lugar de ensuciar cada llamada javac con él …

    – Jonik

    2 de julio de 2011 a las 7:42

  • ¿Qué significa, en cualquier caso, si se establece en Verdadero?

    – Lorenzo Lerate

    30 de agosto de 2016 a las 13:45

  • “Ya sea para incluir las bibliotecas de tiempo de ejecución de Ant en el classpath; el valor predeterminado es sí, a menos que se configure build.sysclasspath. Por lo general, es mejor establecerlo en falso para que el comportamiento del script no sea sensible al entorno en el que se ejecuta. “

    – Daniel Kutik

    5 de octubre de 2016 a las 1:09


avatar de usuario
jwfearn

Como mencionó @Daniel Kutik, presetdef es una buena opción Especialmente si uno está trabajando en un proyecto con muchos build.xml archivos que uno no puede, o prefiere no editar (por ejemplo, los de terceros).

Usar presetdefagregue estas líneas en su nivel superior build.xml expediente:

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

Ahora todo lo subsiguiente javac las tareas esencialmente heredarán includeantruntime="false". Si sus proyectos realmente necesitan bibliotecas de tiempo de ejecución de hormigas, puede agregarlas explícitamente a sus archivos de compilación O establecer includeantruntime="true". Este último también eliminará las advertencias.

Subsecuente javac las tareas aún pueden cambiar esto explícitamente si lo desea, por ejemplo:

<javac destdir="out" includeantruntime="true">
  <src path="foo.java" />
  <src path="bar.java" />
</javac>

Yo recomendaría no usar ANT_OPTS. Funciona, pero anula el propósito de la advertencia. La advertencia le dice a uno que la construcción de uno puede que comportarse de manera diferente en otro sistema. Usando ANT_OPTS hace que esto sea aún más probable porque ahora todos los sistemas necesitan usar ANT_OPTS del mismo modo. También, ANT_OPTS se aplicará globalmente, suprimiendo las advertencias de cualquier manera en todos sus proyectos

  • Funciona muy bien para actualizar un archivo de compilación Ant existente con múltiples tareas javac. El elemento presetdef va justo dentro del elemento del proyecto.

    – saxofonista

    29 de mayo de 2012 a las 16:29

  • @jwfearn: ¿Puede algo similar presetdef ¿Se puede hacer que el truco funcione para tareas Ant no integradas? He probado esto con scalacsino porque abajo build.xml los archivos tienen que definir manualmente el scalac tarea, anulan lo que establezca en el nivel superior.

    – Stuart Golodetz

    26 de agosto de 2012 a las 13:12

  • Una nota, que el uso de presetdef causará una advertencia de hormiga de que la tarea javac ha sido redefinida. Agregar includeantruntime a cada tarea javac evita esto. No estoy al tanto de las desventajas de la advertencia. Pero esto podría ser útil para las personas que ‘necesitan’ compilaciones limpias.

    – mikijov

    27/09/2012 a las 15:53

  • Sí, el presetdef da “Intentando anular la definición anterior de la tarea javac”

    -mike jones

    2 de octubre de 2012 a las 8:51

avatar de usuario
kiannakakis

chet medias escribió una buena explicación aquí:

Históricamente, Ant siempre incluía su propio tiempo de ejecución en el classpath disponible para la tarea javac. Por lo tanto, cualquier biblioteca incluida con Ant, y cualquier biblioteca disponible para ant, se encuentran automáticamente en el classpath de su compilación, le guste o no.

Se decidió que esto probablemente no era lo que la mayoría de la gente quería. Así que ahora hay una opción para ello.

Si elige “verdadero” (para includeantruntime), entonces al menos sabrá que su classpath de compilación incluirá el tiempo de ejecución de Ant. Si elige “falso”, acepta el hecho de que el comportamiento de compilación cambiará entre versiones anteriores y 1.8+.

A pesar de lo molesto que está al ver esta advertencia, sería aún menos feliz si sus compilaciones se rompieran por completo. Mantener este comportamiento predeterminado permite que los archivos de compilación no modificados funcionen de manera consistente entre versiones de Ant.

  • Siempre pensé que esta era la característica/mensaje más tonto de la historia. ¿Quién quiere ‘compilaciones repetibles’ en su herramienta de gestión de configuración? 😉

    – karmakaze

    7 de marzo de 2012 a las 17:10

  • Esta respuesta parece ser la única que nos dice qué significa realmente la advertencia.

    – ty

    11 de marzo de 2018 a las 9:43

avatar de usuario
krishnam raju

La respuesta de Daniel funciona perfectamente. Aquí hay un fragmento de muestra que agregué a mi 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>

Si te gusta que trabaje desde la línea de comandos, la respuesta rápida es ejecutar

export ANT_OPTS=-Dbuild.sysclasspath=ignore

Y luego ejecute su script de hormiga nuevamente.

  • esto me ayuda mucho. Estoy usando set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.

    – Pablo Vargas

    1 de julio de 2016 a las 14:50

  • Estoy enfrentando un problema de hormigas

    – deepakl.2000

    6 de junio a las 10:11

avatar de usuario
Ahmad Nadeem

Usar <property name="build.sysclasspath" value="last"/> en su archivo build.xml

Para más detalles busca includeAntRuntime en Hormiga javac

Se pueden encontrar otros valores posibles aquí

  • esto me ayuda mucho. Estoy usando set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.

    – Pablo Vargas

    1 de julio de 2016 a las 14:50

  • Estoy enfrentando un problema de hormigas

    – deepakl.2000

    6 de junio a las 10:11

avatar de usuario
Garun Kumar Mishra

Me enfrenté a esto mismo, me registré en el programa y la función. hubo una actualización instalada para jdk1.8 que no es compatible con mi configuración anterior (jdk1.6.0) para ant en eclipse. Instalo esa actualización. en este momento, mi proyecto hormiga es construir el éxito.

Pruébelo, espero que esto sea útil.

¿Ha sido útil esta solución?