ここに示すようにカスタム アクションを実装しました。動作しているように見えるシステムがあります。私の場合は不要なので「タッチポイント」拡張を省略しましたが、残りは同じです。
私のアクションは機能 (instructions.install) のインストール フェーズ中に実行されますが、構成フェーズも機能する可能性があります。収集フェーズが機能しませんでした。
アクションは、ダウンロードが既に実行された後、インストール プロセス中に実行されます。理想的にはダウンロードの前ですが、私にとっては大きな問題ではありません。アクションからエラー ステータスを返すと、インストールがキャンセルされます。ダウンロードしたファイルがいくつか残りますが、それらはアクティブ化されず、後で p2 のガベージ コレクターによって削除される可能性があります。
さらに興味深いこともできるようになりました。私のアクション プラグインは、メイン プラグインに依存しています (オプションであり、欲張りではありません)。したがって、インストールは次のように機能します。
- アクションプラグインがダウンロードされました
- カスタムアクションが実行されます
- このアクションは、メインのプラグインが既にインストールされているかどうかを検出し、インストールされている場合はそれを呼び出してライセンス情報を取得します。メイン プラグインは、アクションの API を公開する必要があります。このアクションは、メイン プラグインのバージョンもチェックして、API が存在するかどうかを検出します。
- アクションは、インストールを続行するかキャンセルするかを決定できるようになりました。Display#syncExec を使用してユーザーと対話することもできます (これは checkTrust フェーズのコードが行うことなので、安全だと思います)。必要に応じて、アクションはインストールがヘッドレスかどうかを検出することもできます。
いくつかの落とし穴:
- アクション自体はバージョン管理する必要があります。これは、plugin.xml および p2.inf ファイルで宣言するバージョンであり、プラグインのバージョンとは異なります。1.0.0 をプラグインと同じバージョンに置き換えるだけです。このようにして、アクション プラグインの最新バージョンが実行前に常にダウンロードされます。これは素晴らしいことです。なぜなら、ライセンス ルールに対する問題の変更をアクション プラグインで実装できるようになったからです。
- Actions API は Eclipse 3.5 と 3.6 の間で変更されました。とにかくかなり古いので、おそらく3.5のサポートをやめるでしょう。
- アクション プラグインはおそらく署名されているはずです。私の場合はそうです。Eclipse を更新サイトにポイントするだけで、ダウンロードしたコードを実行できるようになるため、このシステムは私にはほとんど強力すぎるように思えます。
これがさまざまなバージョンの Eclipse や他の IDE でどのように機能するかをテストする必要があります。3.6 で奇妙な (ノンブロッキング) エラーが発生しました。ただし、結果は有望であり、システムが実際に機能する可能性があるようです.