2011-02-24 14 views

Respuesta

363

Ant Runtime

Basta con establecer includeantruntime="false":

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

Si usted tiene que utilizar las javac -task varias veces es posible que desee considerar el uso de PreSetDef para definir su propio javac -task que siempre establece includeantruntime="false" .

Detalles adicionales

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

que es causado por un misfeature introducido en Ant 1.8. Simplemente agregue un atributo de ese nombre a la tarea javac , configúrelo como falso y olvídese de que haya sucedido.

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

si se debe incluir la hormiga tiempo de ejecución bibliotecas en la ruta de clase; predeterminado a yes, a menos que build.sysclasspath sea establecer. Por lo general, es mejor establecerlo en falso, por lo que el comportamiento del script no es sensible al entorno en el que se ejecuta .

+0

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

+0

así que si necesita el tiempo de ejecución de ant en classpath, establezca yes/true o de lo contrario, no/false. Supongo que no lo necesitas. –

+0

¿no está funcionando para usted? –

56

Chet Hosey escribió una buena explicación here:

Históricamente, Hormiga incluido siempre su propio tiempo de ejecución en la ruta de clase a disposición de la tarea javac. Por lo tanto, cualquier biblioteca incluida con Ant, y cualquier biblioteca disponible para hormiga, están automáticamente en el classpath de su construcció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 eso.

Si selecciona "true" (para includeantruntime), al menos sabrá que su classpath de compilación incluirá el tiempo de ejecución de Ant. Si eliges "falso", entonces aceptas el hecho de que el comportamiento de compilación cambiará entre versiones anteriores y 1.8+.

Por más molesto que sea de ver esta advertencia, sería aún menos feliz si sus compilaciones se rompieron por completo. Mantener este comportamiento predeterminado permite que los archivos de compilación no modificados funcionen consistentemente entre las versiones de Ant.

+3

Siempre pensé que esta era la característica/mensaje más tonto de todos. ¿Quién quiere 'compilaciones repetibles' en su herramienta de gestión de configuración?;) – karmakaze

25

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

Si te gusta mi trabajo desde la línea de comandos la respuesta rápida está ejecutando

export ANT_OPTS=-Dbuild.sysclasspath=ignore 

y vuelva a ejecutar la secuencia de comandos de hormigas de nuevo.

+0

Esto me ayuda * mucho *. Estoy usando 'set ANT_OPTS = -Xms40M -Xmx512M -Dbuild.sysclasspath = ignore'. –

65

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

Para utilizar presetdef, agregue estas líneas en su archivo de nivel superior build.xml :

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

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

posteriores javac tareas todavía pueden cambiar de forma explícita esto si se desea, por ejemplo:

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

lo recomiendo contra el uso de ANT_OPTS. Funciona, pero frustra el propósito de la advertencia. La advertencia le dice a uno que la compilación podría comportarse de manera diferente en otro sistema. Usar ANT_OPTS lo hace aún más probable porque ahora cada sistema necesita usar ANT_OPTS de la misma manera. Además, ANT_OPTS se aplicará a nivel mundial, la supresión de las advertencias de cualquier manera en todos sus proyectos

+0

Funciona muy bien para la actualización de un archivo de compilación Ant existente con múltiples tareas javac. El elemento presetdef va solo dentro del elemento del proyecto. – saxman

+0

@jwfearn: ¿Se puede hacer un truco similar de 'presetdef' para trabajar con tareas Ant no integradas? He intentado esto con 'scalac', pero debido a que los archivos 'build.xml' de abajo hacia arriba tienen que definir manualmente la tarea' scalac', anulan lo que configuro en el nivel superior. –

+2

Una nota, que usar presetdef causará una advertencia de que la tarea javac ha sido redefinida. Addind includeantruntime para cada tarea javac lo evita. No estoy al tanto de las desventajas de la advertencia. Pero esto podría ser útil para las personas que 'necesitan' construcciones limpias. – mikijov

5

Uso <property name="build.sysclasspath" value="last"/> en el archivo build.xml

Para más detalles de la búsqueda includeAntRuntime en Ant javac

Otros valores posibles se puede conocer here

-3

me enfrenté a esto mismo, me registro en el programa y la función. hubo una actualización que se ha instalado para jdk1.8 que no es compatible con mi configuración anterior (jdk1.6.0) para hormiga en eclipse. Instalo esa actualización. en este momento, mi proyecto de hormiga es el éxito de la construcción.

Pruébalo, espero que esto sea útil.

Cuestiones relacionadas