我有一个 Java Maven 项目,其中包含大约 800 个源文件(一些由 javacc/JTB 生成),用 javac 编译需要 25 分钟。
当我将 pom.xml 更改为使用 Eclipse 编译器时,编译大约需要 30 秒。
关于为什么 javac (1.5) 运行如此缓慢有什么建议吗? (我不想永久切换到 Eclipse 编译器,因为 Maven 的插件似乎有很多问题。)
我有一个很容易重现问题的测试用例。以下代码在默认包中生成了一些源文件。如果您尝试使用 javac 编译 ImplementingClass.java,它似乎会暂停很长时间。
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();
}
}
最佳答案
Sun 已通过电子邮件向我确认这是一个新错误(在他们的错误数据库中为 6827648)。
关于java - 为什么 javac 1.5 与 Eclipse 编译器相比运行速度如此之慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686545/