【发布时间】:2017-12-10 08:59:53
【问题描述】:
编辑:解决方案如下:禁用 egit 解决了构建问题。出于某种原因,egit 导致构建过程挂起很多分钟。
当我需要重建我的 java 项目时遇到问题。我们的项目需要 12 分钟才能在 eclipse 中使用“干净的项目”进行编译。它会在一个有点随机的百分比上挂很长时间。理论上应该没有构建周期,我已将“使用周期构建时的最大迭代次数”设置为 1,以防万一。 我认为我有一个很好的解决方案来找出它停止的位置:我编写了一个小程序来分析生成的 .class 文件,并查看它在哪些类文件上停止了这么长时间。所以我编写了附加程序,它按 modifieddate 对生成的 .class 文件进行排序 猜猜我是否对结果感到惊讶! 构建于 12:20:40 左右开始,于 12:32:40 完成 4458 个类文件中的第一个是在 12:20:42 生成的,最后一个是在 12:21:22 生成的 所以整个构建需要 40 秒。那么最后 11 分钟的 哔声 是 eclipse 在做什么??
import java.io.File;
import java.util.*;
public class AnalyzeBuildTime {
public static void main(String[] args) throws Exception{
File dir = new File(path_to_project);
Vector<File> v = new Vector<File>();
parse(v,dir);
System.out.println("Nr of files: "+v.size());
Collections.sort(v,new Comparator<File>() {
public int compare(File o1, File o2) {
return new Long(o1.lastModified()).compareTo(o2.lastModified());
}
});
System.out.println("Listing");
for (File f : v) {
System.out.println(f.getName()+"\t"+getTimeString(f.lastModified()));
}
}
private static void parse(Vector<File> v, File f) throws Exception{
if (f.isDirectory()) {
for (File ff : f.listFiles()) {
parse(v,ff);
}
}
else if (f.getName().endsWith(".class")){
v.addElement(f);
}
}
public static String getTimeString(long l){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(l);
return zero(c.get(Calendar.HOUR_OF_DAY))+":"+zero(c.get(Calendar.MINUTE))+":"+zero(c.get(Calendar.SECOND));
}
private static String zero(int i) {
if (i < 10) return "0"+i;
return ""+i;
}
}
编辑 从假期回来,并试图更多地了解这一点。我现在尝试通过 headless building ala 来构建我的工作空间:
eclipsec.exe -noSplash -application org.eclipse.jdt.apt.core.aptBuild -data c:\workspace
这似乎建立了一段时间,显示消息 ala“(发现 4345 个警告)编译多样性”,然后突然停止并挂起大约 4-5 分钟,然后继续,继续“(发现 4346 个警告)编译多样性”好像什么都没发生(是的,每次都会达到不同的警告计数..) 尝试使用 jvisualvm 对其进行分析,但真的不知道我应该寻找什么。一些“编译器处理任务”线程依次产生,最后一个“编译器处理任务”线程挂起时似乎处于等待模式,“运行”为0ms,当编译最终继续时,该线程停止并一个新的“编译器处理任务”线程启动。 需要注意的是,当从命令行编译时,它会编译我所有的项目,不仅是在 eclipse 中花费这么多时间的大项目,而且在它通常挂起之前似乎已经完成了大的“Pos”项目“多样化”或其他项目。 我刚刚尝试从 eclipse neon 升级到 eclipse oxygen,但它似乎具有相同的行为。
EDIT2 好吧,我终于找到了一个“解决方案”,但我对此并不满意。 我正在使用eclipse Neon(4.6.2),并且也尝试过切换到氧气,但问题仍然存在。 然后,我尝试在运行 eclipse mars(4.5.2)的旧计算机上构建我的项目,但奇怪的是没有遇到任何构建挂起的情况。所以我已经从我的旧电脑上复制了我的 mars-eclipse,现在清理我的大项目需要 55 秒,清理所有需要 1:15。仍然对构建挂起的原因非常感兴趣,以便我可以使用更新版本的 eclipse。
【问题讨论】:
-
好吧,既然它似乎没有在编译,那它还有什么用呢?任务管理器/性能将使您大致了解正在使用的计算机资源。分析答案是个好主意;恐怕命令行编译只会告诉您您已经知道的内容。你不需要另一个 IDE,我注意到你没有要求一个。无论你有什么构建过程,编译后都做了什么?
-
不,它不是一个 maven 项目,它是一个普通的旧 eclipse java 项目
-
您是否在进度视图中启用了睡眠和“系统”操作的显示?我不确定你如何判断这座建筑需要 12 分钟,但也许那里会出现什么?
-
嗨@runholen,你的调试模式是不是加载和运行也很慢??