我有一个 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 https://bugs.java.com/bugdatabase/view_bug?bug_id=6827648在他们的错误数据库中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)