2010-01-19 20 views
14

¿Hay un compilador distribuido para Java, análogo a distcc para C/C++?Distribuidor distribuido de Java

+0

¿Tiene un requisito para uno, o es solo curiosidad? – skaffman

+0

Quiero escribir uno. – Boolean

+0

¡Buena suerte! Tenga en cuenta los puntos que menciono en mi respuesta, y le deseo la mejor de las suertes para escribirlo. –

Respuesta

16

La respuesta directa a su pregunta es "no". Sin embargo, probablemente no te ayude de todos modos ... compilar Java es muy rápido.

En un proyecto pequeño, la compilación es lo suficientemente rápida como para que no le importe realmente. En un proyecto grande, tendría que tratar de arrojar el archivo para compilar a través de una red, y tener que lidiar con potencialmente también arrojar a través de muchos megabytes de dependencias también.

Una cosa que puede hacer para mejorar su velocidad de compilación es usar el eclipse compiler en lugar del Sun javac. El compilador de Eclipse tiene varios subprocesos y, con suerte, utilizará todos los núcleos de su máquina.

Probablemente también vale la pena mencionar que Apple también recientemente reduced distcc support, ya que en general, en hardware más nuevo, le costó más tiempo obtener el código en otro lugar para compilar y volver, que solo hacer la compilación localmente. Para citar a Apple:

El rendimiento de construcción de una sola computadora de Xcode se ha mejorado hasta el punto de que la construcción distribuida con compilaciones de red distribuidas es más lenta que las compilaciones locales en la mayoría de los casos.

+1

Buen consejo por todas partes. Esto también se relaciona con la respuesta de Karol Wilk, ya que creo que el compilador interno de Eclipse y los jikes están al menos algo relacionados, es decir, se originan en (probablemente) código común. El compilador de Eclipse "engaña" al compilar de forma incremental, y creo que jikes también sabe hacerlo. –

+0

Jikes está escrito en C++, ecj es Java, por lo que probablemente no sea un código común. –

+1

@Carl, ecj fue escrito basado en las experiencias de Jikes. Me alegro de que lo hicieran, javac necesitaba competencia. –

2

Tal vez Jikes funcionaría para usted. Puede lograr efectos muy similares con un guión de hormiga inteligente y nfs como el sistema de archivos ...

+0

¿No se supone que Java se compilará una vez que se ejecute en algún lugar? –

+7

@Ipthnc: ¿qué te hace pensar que no es así? y ¿cómo es eso relevante para la pregunta? –

3

Si estás molesto con esperar un largo tiempo para su Java compila, entonces usted podría considerar uno de los siguientes:

  • romper su proyecto en varias diferentes archivos JAR (en una dependencia jerárquica) Con un poco de suerte, los cambios solo afectarán a la fuente en uno de esos contenedores, mientras que los demás pueden continuar sirviendo como dependencias.
  • divide tu proyecto en grupos de fuentes, quizás por paquete, y utiliza Apache para coordinar tu compilación. Siempre fui demasiado perezoso para usarlo, pero puede configurar una administración de dependencia explícita para evitar volver a compilar cosas para las que ya existen archivos .class y son más recientes que la fuente. El esfuerzo que entra en establecer esto una vez puede generar dividendos en unos pocos días si el proyecto es grande y las compilaciones están masticando mucho de su tiempo.

En oposición a la multi-extracción de muestras, lo que reduce la cantidad de código que es necesario volver a compilar también reducirá el consumo de energía de su PC y la huella de carbono;)

+1

... suponiendo que su PC obtiene su energía de los combustibles fósiles –

0

creo que el compilación en paralelo de módulos Maven independientes debería ser bastante fácil usando algunas secuencias de comandos simples: simplemente extraiga del control de versiones, cambie el directorio y ejecute mvn clean compile. Agregue mvn deploy para obtener el artefacto en su repositorio de artefactos.

Esto debería funcionar incluso con módulos dependientes, sin embargo, necesitará un poco de trabajo en la sincronización.

2

he escrito el inicio de una para java6

http://www.pointdefence.net/jarc/index.html

Se distribuye en la tarea de Java compilador. Por lo tanto, funcionaría bien con la compilación paralela de módulos Maven independientes.

Cuestiones relacionadas