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?
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?
Respuestas:
Simplemente configure includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Si tiene que usar la javac
-tarea varias veces, puede considerar usarla PreSetDef
para definir su propia javac
-tarea que siempre se establece includeantruntime="false"
.
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.
Como @Daniel Kutik mencionó, 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).
Para usar presetdef
, agregue estas líneas en su build.xml
archivo de nivel superior :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Ahora todas las javac
tareas 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 javac
tareas 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_OPTS
hace aún más probable porque ahora todos los sistemas deben usarse ANT_OPTS
de la misma manera. Además, ANT_OPTS
se aplicará a nivel mundial, eliminando advertencias involuntariamente en todos sus proyectos
presetdef
truco similar funcione para tareas Ant no integradas? He intentado esto con scalac
, pero debido a que los build.xml
archivos inferiores tienen que definir manualmente la scalac
tarea, anulan lo que configuré en el nivel superior.
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.
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 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.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
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.