Tôi có một dự án Java Maven với khoảng 800 tệp nguồn (một số được tạo bởi javacc/JTB), việc này sẽ mất 25 phút để biên dịch với javac.Tại sao javac 1.5 chạy chậm như vậy so với trình biên dịch Eclipse?
Khi tôi thay đổi tệp pom.xml của mình để sử dụng trình biên dịch Eclipse, phải mất khoảng 30 giây để biên dịch.
Bất kỳ đề xuất nào về lý do tại sao javac (1.5) đang chạy quá chậm? (Tôi không muốn chuyển sang trình biên dịch Eclipse vĩnh viễn, vì plugin cho Maven có vẻ nhiều hơn một chút lỗi.)
Tôi có một trường hợp thử nghiệm dễ dàng tái tạo vấn đề. Đoạn mã sau tạo ra một số tệp nguồn trong gói mặc định. Nếu bạn cố gắng biên dịch ImplementingClass.java bằng javac, nó sẽ có vẻ tạm dừng trong một thời gian dài.
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();
}
}
Thử tạo SSCCE (http://sscce.org/) và gửi báo cáo lỗi với Sun (http://bugs.sun.com/). Đặc biệt là kể từ khi bạn đã giảm các vấn đề cho một trường hợp khá cụ thể. –
Bạn đang sử dụng hệ điều hành nào? Đó là nhanh chóng cho tôi ... trên OS X. – TofuBeer
Đây là trên Windows XP và Windows Server 2003 –