2010-07-09 4 views
6

El compilador de Java proporciona una compilación incremental, por lo que javac tarea ant también. Pero la mayoría de los otros procesos no.¿Cómo configurar la creación lenta o incremental en general con Ant?

Considerando los procesos de compilación, transforman algunos conjuntos de archivos (origen) en otro conjunto de archivos (destino).

puedo distintos dos casos aquí:

  1. Transformator no puede tomar un subconjunto de archivos de código fuente, sólo el sistema entero. Aquí solo podemos hacer lazy build - si no se modificaron los archivos del código fuente - omitimos el procesamiento.
  2. Transformador puede tomar un subconjunto de archivos de fuentes y producir un resultado parcial - construcción incremental.

¿Qué son las extensiones ant internas, de terceros u otras herramientas para implementar la compilación lenta y progresiva? ¿Puede proporcionar algunos ejemplos generalizados de archivos de compilación?

Me interesa que trabaje con el compilador GWT en particular.

Respuesta

1

En relación con GWT, no es posible hacer compilaciones incrementales porque el compilador GWT examina todo el código fuente de una vez y optimiza e inserta el código. Esto significa que el código que no se modificó podría evaluarse de manera diferente, por ejemplo, si comienza a usar un método de una clase que no se modificó, el método estaba en el paso de compilación anterior omitido, pero ahora debe compilarse en.

+0

Pero, sin duda, podría ser posible que ningún código que afecta a la salida de un módulo de GWT ha cambiado, y por lo tanto el módulo no tendría que volver a compilar. Los cambios que afectan a la salida son cualquier cosa incluida en el árbol

+0

@Andrew No, no es necesario. Porque el compilador GWT elimina todo el código no utilizado. Entonces, si comienzas a usar un método de ese módulo, no estaría disponible. También porque la optimización en línea ocurre antes de que se genere el JavaScript real. Tal vez sería posible almacenar en caché los resultados intermedios, pero no estoy seguro de si eso sería eficiente, porque esos resultados deben interpretarse de nuevo y leerse/escribirse en el disco, en lugar de mantenerlo en la memoria. –

+2

Pero si ningún origen de Java (que se usa para generar salida JS) ha cambiado desde la última compilación, entonces no hay necesidad de recompilar nada, incluye optimizaciones y eliminación de línea y código ..... –

5

La tarea uptodate es la solución genérica de Ant para este problema. Es lo suficientemente flexible como para funcionar en la mayoría de las situaciones en las que es deseable la compilación lenta o incremental.

Tuve el mismo problema que tú: tengo un módulo GWT como parte de mi código, y no quiero pagar el (¡caro!) Costo de recompilarlo cuando no es necesario. La solución en mi caso parecía algo como esto:

<uptodate property="gwtCompile.mymodule.notRequired" 
    targetfile="www/com.example.MyGwtModule/com.example.MyGwtModule.nocache.js"> 
    <srcfiles dir="src" includes="**"/> 
</uptodate> 

<target name="compile-mymodule-gwt" unless="gwtCompile.mymodule.notRequired"> 
    <compile-gwt-module module="com.example.MyGwtModule"/> 
</target> 
Cuestiones relacionadas