Consejos para acelerar el tiempo de compilación en Linux usando ANT, Javacc, JUnit y compilación de clases de Java

votos
5

Tenemos una gran base de código que tarda aproximadamente 12 minutos en las máquinas de desarrollo para autogenerar algunas clases de Java 5 usando JavaCC y luego compila todas las clases y ejecuta la prueba de unidades.

El proyecto consiste en múltiples proyectos que se pueden construir en grupos, pero apuntamos a una construcción completa en menos de 10 minutos

¿Qué consejos hay para reducir este tiempo de compilación?

Gracias

Publicado el 28/09/2008 a las 21:21
por usuario
En otros idiomas...                            


8 respuestas

votos
3

Una solución rápida que podría reducir el tiempo de inactividad es asegurarse de ejecutar Ant utilizando la JVM del servidor (de forma predeterminada, usa la VM del cliente). Establezca ANT_OPTS para incluir "-servidor".

Respondida el 28/09/2008 a las 22:03
fuente por usuario

votos
2
  • Perfile el proceso de construcción y vea dónde están los cuellos de botella. Esto puede darte algunas ideas sobre cómo mejorar el proceso.
  • Intente crear proyectos independientes en paralelo en máquinas multi-core / CPU. Como una extensión de esta idea, es posible que desee buscar un equivalente en Java de distcc (no sé si existe) para distribuir su construcción en varias máquinas.
  • Consigue mejores máquinas.
Respondida el 28/09/2008 a las 22:11
fuente por usuario

votos
0

Esto probablemente no ayudaría en el corto plazo, pero pensé que debería tirarlo allí de todos modos.

Si su proyecto se puede dividir en proyectos más pequeños (un subsistema de base de datos, registro, como ejemplos), puede estar interesado en usar algo como maven para manejar la compilación. Puede ejecutar cada mordida más pequeña como un proyecto o módulo por separado, y maven podrá mantener lo que debe construirse si existen cambios. En esto, la construcción puede enfocarse en la parte principal de su proyecto y no tomará tanto tiempo.

Respondida el 28/09/2008 a las 23:46
fuente por usuario

votos
0

¿Cuál es el desglose en el tiempo dedicado:

  1. generando las clases
  2. compilando las clases
  3. corriendo las pruebas

Dependiendo de su proyecto, puede ver aumentos significativos en el tiempo de construcción asignando un tamaño de pila mayor a javac (memoryMaximumSize) y junit (maxmemory).

Respondida el 29/09/2008 a las 01:13
fuente por usuario

votos
1

Intenta inspirarte con un programador pragmático. Compile solo lo que es necesario, tenga dos o más suites de prueba. Uno para pruebas rápidas, otro para pruebas completas. Considere si hay una necesidad real de usar cada paso de construcción cada vez. Es necesario intentar usar el compilador jikes en lugar de javac. Después de que el proyecto abarca varios cientos de clases, cambio a jikes para mejorar la velocidad. Pero tenga en cuenta los posibles problemas de incompatibilidad. No olvide incluir un objetivo todo en uno para realizar cada paso con la reconstrucción completa y la prueba completa del proyecto.

Respondida el 29/09/2008 a las 12:58
fuente por usuario

votos
1

Ahora que ha explicado el proceso con más detalle, aquí hay dos opciones más:

  1. Una máquina / clúster dedicado donde la compilación se realiza mucho más rápido que en una estación de trabajo normal. Luego, antes de una confirmación, los desarrolladores ejecutarían un script que construye su código en la máquina / clúster dedicado.

  2. Cambia la partición en subproyectos para que sea más difícil romper un proyecto modificando otro. Esto debería hacer que sea menos importante hacer una compilación completa antes de cada commit. Solo los compromisos que están en contacto con subproyectos sensibles, o aquellos que abarcan múltiples proyectos, necesitarán ser "controlados" mediante una compilación completa.

Respondida el 29/09/2008 a las 19:50
fuente por usuario

votos
0

¿Es muy importante que toda la construcción dure menos de 10 minutos? Si hace que los subproyectos sean independientes entre sí, podría trabajar en un subproyecto mientras ya ha compilado los otros (piense en Maven o Ivy para administrar las dependencias).

Otra solución (y si sus módulos son razonablemente estables) es tratar sus subproyectos como proyectos independientes. Cada proyecto seguiría su propio ciclo de publicación y estaría disponible en un repositorio Maven / Ivy local. Por supuesto, esto funciona bien si al menos partes del proyecto son razonablemente estables.

Respondida el 30/09/2008 a las 16:17
fuente por usuario

votos
1

algunos consejos para reducir el tiempo de construcción:

  1. hacer menos trabajo. por ejemplo, eliminar la tala innecesaria / eco a los archivos y consola

  2. hacer que su acumulación 'gradual' . Compilar sólo cambia clases.

  3. eliminar la duplicación de esfuerzos. Es más fácil decirlo que hacerlo, pero si se ejecuta la estructura en el modo de depuración ( "hormiga -debug") a veces se puede ver las tareas redundantes u objetivos.

  4. evitar operaciones costosas. copia de archivos, y el embalaje de los frascos en las guerras son necesarias para release.Signing frascos es caro y sólo se debería hacer, si es posible' para Milestone comunicados en lugar de cada proyecto de construcción

Respondida el 23/10/2012 a las 09:09
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more