2013-04-12 31 views
4

我创建了一个插件来挂钩保存操作并创建经过编辑的JavaScript文件的缩小javascript文件。您可以在此问题中看到完整的代码:eclipse plugin does not work after update to juno (eclipse 4)我的eclipse插件创建了无限的工作空间构建循环,可能与作业有关

问题是,由于Juno此插件在工作空间构建过程中创建了无限循环。 它首先开始缩小我根本没有改变的文件。该文件在构建中创建了一个无限循环。当它完成文件缩小时,它会启动一个新的工作空间构建并再次缩小文件等等。 但经过一段时间后,情况会变得更糟,特别是在新的eclipse开始时。突然间,有十几个文件被我缩小,我从未碰过。 如果我卸载我的插件,然后让Eclipse建立工作区,重新安装我的插件它再次运作。但过了一段时间,这一切都开始了。

我认为这与我处理作业创建文件的方式有关,请参见下文。 Juno可能有什么改变?但是我没有找到任何有关这方面的信息。

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

它工作正常,如果我停用“项目 - >自动生成”。手动构建项目不会产生此错误。似乎只有在工作区自动构建时才会发生。 – DarsVaeda

+0

我猜这是你有一个嵌套run()方法声明的拼写错误。但更重要的是,newFile的位置在哪里?如果它不在输出文件夹中,则对该文件的任何更改都会触发增量构建。如果你不想让newFile触发构建,那么将其设置为派生。 –

+0

是的,我认为这是一个错字。 NewFile位于工作区中,保存文件位于同一文件夹中。构建触发很好。但有时它会一次又一次地导致建筑物循环。你是什​​么意思把它设置为“派生”?我会怎么做? – DarsVaeda

回答

2

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

您可以致电IResourcesetDerived方法:

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

或当您创建的文件,它可以被创建为衍生,虽然这样的呼吁:

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

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

从文档:

一个衍生资源是一个普通的文件或文件夹是在翻译,编辑,复制或以其他方式处理 其他文件的过程中产生 。派生资源不是原始数据,可以从其他资源重新创建 。从版本和配置管理中排除派生的 资源是司空见惯的,因为它们会在每个用户重新生成文件时将团队存储库与这些不断变化的 文件的版本混杂在一起。

+0

不幸的是,这并没有改变错误的行为。 – DarsVaeda

相关问题