advertencia de hormigas: "'includeantruntime' no se configuró"

397

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?

user496949
fuente

Respuestas:

388

Ant Runtime

Simplemente configure includeantruntime="false":

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

Si tiene que usar la javac-tarea varias veces, puede considerar usarla PreSetDefpara definir su propia javac-tarea que siempre se establece includeantruntime="false".

Detalles adicionales

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

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

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

Si se incluyen 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.

Daniel Kutik
fuente
Apache Ant (TM) versión 1.8.2 compilada el 20 de diciembre de 2010
user496949
así que si necesita el tiempo de ejecución de la hormiga en el classpath, configúrelo en yes / true, de lo contrario, en no / false. Supongo que no lo necesitas.
Daniel Kutik
55
+1, gran respuesta. Me gustaría poder establecer que una vez en algún lugar del BuildFile en lugar de tirar basura cada llamada javac con ella ...
Jonik
1
En cualquier caso, ¿está configurado en True?
Lorenzo Lerate
"Si se deben incluir las bibliotecas de tiempo de ejecución de Ant en el classpath; el valor predeterminado es yes, a menos que se establezca build.sysclasspath. Por lo general, es mejor establecer esto en false para que el comportamiento del script no sea sensible al entorno en el que se ejecuta. "
Daniel Kutik
72

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

Para usar presetdef, agregue estas líneas en su build.xmlarchivo de nivel superior :

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

Ahora todas las javactareas posteriores esencialmente heredarán includeantruntime="false". Si sus proyectos realmente necesitan bibliotecas de tiempo de ejecución ant, puede agregarlos explícitamente a sus archivos de compilación O bien configurarlos includeantruntime="true". Este último también eliminará las advertencias.

Las javactareas posteriores 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>

Recomiendo 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 podría comportarse de manera diferente en otro sistema. El uso lo ANT_OPTShace aún más probable porque ahora todos los sistemas deben usarse ANT_OPTSde la misma manera. Además, ANT_OPTSse aplicará a nivel mundial, eliminando advertencias involuntariamente en todos sus proyectos

jwfearn
fuente
1
Funciona muy bien para actualizar un archivo de compilación Ant existente con múltiples tareas de javac. El elemento presetdef va justo dentro del elemento del proyecto.
saxman
@jwfearn: ¿Se puede hacer que un presetdeftruco similar funcione para tareas Ant no integradas? He intentado esto con scalac, pero debido a que los build.xmlarchivos inferiores tienen que definir manualmente la scalactarea, anulan lo que configuré en el nivel superior.
Stuart Golodetz
2
Una nota, que usar presetdef causará una advertencia de hormiga de que la tarea javac ha sido redefinida. Addind includeantruntime a cada tarea de Java evita esto. No estoy al tanto de las desventajas de la advertencia. Pero esto podría ser útil para las personas que 'necesitan' construcciones limpias.
mikijov
Sí, el presetdef da "Intentando anular la antigua definición de la tarea javac"
Mike Jones
62

Chet Hosey escribió una buena explicación aquí :

Históricamente, Ant siempre incluyó su propio tiempo de ejecución en el classpath disponible para la tarea javac. Por lo tanto, las bibliotecas incluidas con Ant, y cualquier biblioteca disponible para ant, están automáticamente en la ruta de clase 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. Entonces ahora hay una opción para ello.

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

Tan molesto como esté de 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 consistentemente entre versiones de Ant.

kgiannakakis
fuente
3
Siempre pensé que esta era la característica / mensaje más tonto de todos. ¿Quién quiere 'compilaciones repetibles' en su herramienta de administración de configuración? ;)
karmakaze
1
Esta respuesta parece ser la única que nos dice qué significa realmente la advertencia.
ty
26

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>
Krishnam Raju
fuente
5

Si quieres que trabaje desde la línea de comandos, la respuesta rápida se está ejecutando

export ANT_OPTS=-Dbuild.sysclasspath=ignore

Y luego ejecuta tu script de hormigas nuevamente.

slott
fuente
Esto me ayuda mucho . Estoy usando set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.
Paul Vargas
5

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

Para más detalles buscar includeAntRuntimeen Ant javac

Otros valores posibles se pueden encontrar aquí

Ahmad Nadeem
fuente
-3

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

Pruébalo, espero que esto sea útil.

Garun Kumar Mishra
fuente