Tengo un proyecto Java Maven con aproximadamente 800 archivos fuente (algunos generados por javacc/JTB) que demoran unos buenos 25 minutos en compilarse con javac.¿Por qué javac 1.5 se ejecuta tan lentamente comparado con el compilador Eclipse?
Cuando cambié mi pom.xml para utilizar el compilador Eclipse, tarda unos 30 segundos en compilarse.
¿Alguna sugerencia de por qué javac (1.5) se ejecuta tan lentamente? (No quiero cambiar al compilador de Eclipse permanentemente, ya que el plugin de Maven parece más que un pequeño error).
Tengo un caso de prueba que reproduce fácilmente el problema. El siguiente código genera una cantidad de archivos fuente en el paquete predeterminado. Si intenta compilar ImplementingClass.java con javac, parecerá que se detiene por un tiempo desorbitado.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class CodeGenerator
{
private final static String PATH = System.getProperty("java.io.tmpdir");
private final static int NUM_TYPES = 1000;
public static void main(String[] args) throws FileNotFoundException
{
PrintStream interfacePs = new PrintStream(PATH + File.separator + "Interface.java");
PrintStream abstractClassPs = new PrintStream(PATH + File.separator + "AbstractClass.java");
PrintStream implementingClassPs = new PrintStream(PATH + File.separator + "ImplementingClass.java");
interfacePs.println("public interface Interface<T> {");
abstractClassPs.println("public abstract class AbstractClass<T> implements Interface<T> {");
implementingClassPs.println("public class ImplementingClass extends AbstractClass<Object> {");
for (int i=0; i<NUM_TYPES; i++)
{
String nodeName = "Node" + i;
PrintStream nodePs = new PrintStream(PATH + File.separator + nodeName + ".java");
nodePs.printf("public class %s { }\n", nodeName);
nodePs.close();
interfacePs.printf("void visit(%s node, T obj);%n", nodeName);
abstractClassPs.printf("public void visit(%s node, T obj) { System.out.println(obj.toString()); }%n", nodeName);
}
interfacePs.println("}");
abstractClassPs.println("}");
implementingClassPs.println("}");
interfacePs.close();
abstractClassPs.close();
implementingClassPs.close();
}
}
Pruebe a producir un SSCCE (http://sscce.org/) y presente un informe de error con Sun (http://bugs.sun.com/). Especialmente porque ya redujo los problemas a un caso bastante específico. –
¿Qué sistema operativo está usando? Es rápido para mí ... en OS X. – TofuBeer
Esto es en Windows XP y Windows Server 2003 –