4

保存アクションにフックするプラグインを作成し、編集された JavaScript ファイルの縮小された JavaScript ファイルを作成しました。この質問で完全なコードを見ることができます: eclipse plugin does not work after update to juno (eclipse 4)

問題は、Juno 以降、このプラグインがワークスペースの構築プロセスで無限ループを作成することです。最初に、まったく変更していないファイルの縮小を開始します。このファイルは、ビルドで無限ループを作成します。ファイルの縮小が完了すると、新しいワークスペースのビルドが開始され、ファイルが再度縮小されます。しかし、これは、特に新しい日食の開始時に、しばらくするとさらに悪化します。突然、私が触れたことのない多数のファイルが縮小されます。プラグインをアンインストールし、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();
4

1 に答える 1

2

newFile派生に設定する必要があります。派生ファイルは、ビルド中にワークスペースによって暗黙的に作成されるファイルであり、クリーン中に消去する必要があります (次のビルド中に復元できるため)。

setDerived次のメソッドを呼び出すことができますIResource

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

または、ファイルを作成するときに、次のような呼び出しを使用して、派生として作成できます。

newFile.create(ストリーム、IResource.DERIVED、モニター);

ただし、DERIVEDsetContents を使用してフラグを設定することはできませんsetDerived(true)。その場合は明示的に呼び出す必要があります。

ドキュメントから:

派生リソースは、他のファイルを変換、コンパイル、コピー、またはその他の方法で処理する過程で作成される通常のファイルまたはフォルダーです。派生リソースは元のデータではなく、他のリソースから再作成できます。派生リソースをバージョンおよび構成管理から除外するのが一般的です。そうしないと、各ユーザーがファイルを再生成するたびに変化し続けるファイルのバージョンでチーム リポジトリが乱雑になるためです。

于 2013-04-18T21:58:02.073 に答える