我创建了一个插件来挂钩保存操作并创建一个已编辑的javascript文件的缩小的javascript文件。您可以在此问题中查看完整代码:eclipse plugin does not work after update to juno (eclipse 4)
问题在于,由于Juno这个插件在工作空间构建过程中创建了无限循环。 它首先开始缩小我根本没有改变的文件。此文件在构建中创建无限循环。当它完成minifing文件时,它会启动一个新的工作区构建并再次缩小文件,依此类推。 但是经过一段时间后,这种情况会变得更糟,尤其是在新的日食开始时。突然间,有十几个文件缩小了我从未接触过的文件。 如果我卸载我的插件,那么让eclipse构建工作区,重新安装我的插件再次工作。但过了一段时间,这一切都开始了。
我认为这与我处理创建文件的工作方式有关,见下文。也许朱诺的情况发生了变化?但我没有找到任何相关的信息。
Job compileJob = new Job("Compile .min.js") {
public IStatus run(IProgressMonitor monitor) {
public IStatus run(IProgressMonitor monitor) {
byte[] bytes = null;
try {
bytes = CallCompiler.compile(fullLocation.toString(), CallCompiler.SIMPLE_OPTIMIZATION).getBytes();
InputStream source = new ByteArrayInputStream(bytes);
if (!newFile.exists()) {
newFile.create(source, IResource.NONE, null);
} else {
newFile.setContents(source, IResource.NONE, null);
}
} catch (IOException e) {
e.printStackTrace();
} catch (CoreException e) {
e.printStackTrace();
}
return Status.OK_STATUS;
}
};
compileJob.setRule(newFile.getProject());
compileJob.schedule();
答案 0 :(得分:2)
您需要将newFile
设置为派生。派生文件是在构建期间由工作空间隐式创建的文件,并且应该在清理期间擦除它(因为它可以在下一次构建期间恢复)。
您可以在setDerived
上调用IResource
方法:
org.eclipse.core.resources.IResource.setDerived(boolean, IProgressMonitor)
或者当您创建文件时,可以将其创建为派生文件,但可以通过以下方式调用:
newFile.create(stream,IResource.DERIVED,monitor);
但是,你不能通过setContents设置DERIVED
标志,在这种情况下你必须明确地调用setDerived(true)
。
来自文档:
派生资源是常规文件或文件夹 在翻译,编译,复制或其他过程中创建的 处理其他文件。派生资源不是原始数据,可以是 从其他资源重新创建。排除派生是很常见的 来自版本和配置管理的资源,因为它们会 否则,团队存储库会随着这些不断变化的版本而变得混乱 每个用户重新生成文件。