2017-02-13 3 views
0

私のRCPアプリにはいつでもワークスペースの場所を求めるプロンプトが表示されます。デフォルトの場所は、-dataのarg(eclipse.ini)またはosgi.instance.area.defaultのプロパティ(configuration/config.ini)で指定できます。しかし、私は、ユーザがワークスペースの場所を変更するためにこれらのファイルのいずれかを知り編集する必要はありません。Eclipse RCP App:ユーザーにワークスペースの設定を促すには

嗜好の設定Prompt for workspace on startupは効果がありません。私は-data引数またはosgi.instance.area.defaultプロパティが設定されていないクリーンなワークスペースでアプリケーションを起動し、現在のディレクトリにworkspaceフォルダを作成し、場所の選択を求めません。

私はアプリケーションにIDEApplicationクラスのコピーを使用しています。の後に実行される最初の行の1つである188行目では、プラットフォームの場所がすでに設定されているため、ダイアログが表示されません。 UIを起動しようとする前に既に設定されている理由はわかりません。好みを設定しても効果はありません。 (configuration/.settings/org.eclipse.ui.ide.prefsで確認したところ、SHOW_WORKSPACE_SELECTION_DIALOG=true)。

IはcheckInstanceLocation()の開始時

instanceLoc = instanceLoc.createLocation(instanceLoc, null, false); 

を添加することにより位置を再設定しようとしました。これにより、ワークスペースチューザダイアログが表示されますが、この方法で位置を設定しても、起動時にアプリケーションが実際にそのインスタンス領域に使用する内容には影響しません。

私のアプリではearlyStartupコードが干渉している可能性があると思っていました。あなたがあまりにも早く環境設定にアクセスすると、ワークスペースチューザが開くのを防ぐことができます。だから、私が持っていた宣言を少ししかコメントアウトしていないのに、私はまだワークスペースの選択ダイアログを表示することができません。

+0

保存された場所を拾っている可能性があります。初期の場所は 'org.eclipse.osgi.internal.location.EquinoxLocations'の' buildLocation'メソッドで設定されていますので、それをトレースしてみてください。 –

+0

問題は、私が提供するOSGIサービスがResourcesPluginにアクセスしていることが判明しました。サービスを提供するバンドルのプラグインの遅延起動ポリシーを削除すると、ワークスペース・チューザーがロードされます。しかし今では私のサービスは注入されません(私は宣言的なサービスを提供して消費しています)。サービスバンドルの開始レベルを上げようとしましたが、それは助けになりませんでした。サービスの開始を遅らせるか、バンドルを遅延させることなくサービスを利用可能にするにはどうすればよいですか? – MidnightJava

+0

NM。私は十分に高いスタートレベルを試していないようだ。デフォルトは4で、私は5を試しました。それは7以上で動作します。私は10を使うべきだと思いますか?何が必要なのかを正確に判断する方法はありますか? – MidnightJava

答えて

0

私のOSGIサービスの依存関係としてロードされたクラスの中には、クラスResourcesPluginにアクセスしていたため、ワークスペースの場所がすぐに設定されるという問題がありました。これはワークスペース・チューザー・ダイアログが開始される前に行われていたため、指定されている場合は-data argの値が使用され、それ以外の場合は$(pwd)/workspaceでした。

私のサービスプラグインの開始レベルを調整して問題を解決しようとしました。開始レベルが7以上の場合、ワークスペース・チューザー・ダイアログはもはや先取りされませんでした。しかし、サービスは正しく機能しませんでした。カスタムスタートレベルでサービスを正常に動作させることができなかった多くの試みの後に、私はそのアプローチを断念し、コードを再加工して、ResourcesPluginへの参照がアプリ​​ケーション起動プロセスの後に起こるようにしました。具体的には、WorkbenchWindowAdvisorのカスタムのpostWindowOpenメソッドに移動しました。

関連する問題