我的eclipse插件创建了无限的工作空间构建循环,可能与工作相关

时间:2013-04-12 07:58:15

标签: java eclipse build eclipse-plugin workspace

我创建了一个插件来挂钩保存操作并创建一个已编辑的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();

1 个答案:

答案 0 :(得分:2)

您需要将newFile设置为派生。派生文件是在构建期间由工作空间隐式创建的文件,并且应该在清理期间擦除它(因为它可以在下一次构建期间恢复)。

您可以在setDerived上调用IResource方法:

org.eclipse.core.resources.IResource.setDerived(boolean, IProgressMonitor)

或者当您创建文件时,可以将其创建为派生文件,但可以通过以下方式调用:

newFile.create(stream,IResource.DERIVED,monitor);

但是,你不能通过setContents设置DERIVED标志,在这种情况下你必须明确地调用setDerived(true)

来自文档:

  

派生资源是常规文件或文件夹   在翻译,编译,复制或其他过程中创建的   处理其他文件。派生资源不是原始数据,可以是   从其他资源重新创建。排除派生是很常见的   来自版本和配置管理的资源,因为它们会   否则,团队存储库会随着这些不断变化的版本而变得混乱   每个用户重新生成文件。