19

IDE であるEclipseは、Java で作成された巨大なデスクトップ アプリケーションの最良の例の 1 つです。

私が見たほとんどの Java アプリケーションは通常、バッチまたはシェル スクリプトに依存して、アプリケーションのクラス パスを使用して文字列を作成し、クラス パスを環境変数として使用して JVM を起動します。

一方、Eclipse はネイティブのランチャーに依存しています。何故ですか ?このランチャーは何をしますが、スクリプトは何をしませんか?

約 1 年半前に「ネイティブ ランチャーを使用したほうがよい」という記事を読んだことを覚えていますが、ランチャーの内部動作については説明していませんでした。

4

3 に答える 3

24

Equinox ランチャーは JNI を使用して、ランチャーと同じプロセスで Java VM を開始します。JNI を使用すると、スプラッシュ画面で SWT ウィジェットを使用することもできます。


実際には、ランチャーの実行可能ファイルである eclipse.exe が 3.3M5 以降、2 つの部分に分割されているため、スクリプトを引き続き使用できます。

  • 実行可能ファイル、および
  • 共有ライブラリ (例: eclipse_1006.dll)。

実行可能ファイルは、Eclipse インストールのルートにあります。共有ライブラリは、プラグイン ディレクトリ
のプラットフォーム固有のフラグメント にあります。org.eclise.equinox.launcher.[config]

ランチャー コードの大部分をフラグメント内に存在する共有ライブラリに移動するということは、起動コードのその部分を更新サイトから更新できるようになったことを意味します。また、java から起動する場合、スプラッシュ画面を表示するために共有ライブラリを JNI 経由でロードできます。

ここで説明したように、ネイティブ ランチャーなしで Eclipse 3.3 を起動できます。

java -jar plugins/org.eclipse.equinox.launcher_1.0.0.v20070319.jar

jar ファイルの名前がバージョンに依存するようになったため、正確なファイル名を使用して jar を呼び出す単純なスクリプトが、jar ファイルが更新されると壊れてしまうことに注意してください。

代わりに、一致するファイルを探すことができますorg.eclipse.equinox_*.jar。ありがたいことに、Eclipse-wiki には、この場合に役立つ適切なスクリプト テンプレートが含まれています。
既存のスクリプトを変更したくない場合は、Equinox Launcher プラグインを検索して Eclipse メイン ディレクトリにコピーし、コピーの名前を startup.jar に変更することもできます。

于 2009-01-26T12:16:32.257 に答える
10

これらのいくつかはウィンドウ固有のもので、いくつかは一般的なものです。

  1. シェルの統合は、ターゲット プラットフォームでネイティブに使用可能なスクリプト言語のバッチ スクリプトに比べて大幅に改善されています。

  2. スクリプトを実行するために追加のプロセスを起動する必要はありません (ビルド/テスト/デプロイ サイクルの一部として IDE 自体をスクリプト化している場合、これは大きな問題になる可能性があります。

  3. 実行可能ヘッダーは通常、プログラムの「ビット数」を定義します。したがって、実行可能ファイルは、32 ビットまたは 64 ビットの実行を許可/禁止することを明示的に示すことができます。

  4. Windows 上の実行可能ファイルは、暗号署名されている場合があります。

  5. 多くのマルウェア/ファイアウォール ガード プログラムは、実行可能なホワイト リストごとに維持します。そのため、一般的な「javaw.exe はインターネットにアクセスしようとしています。」また、ユーザーはこの動作をより細かく制御できます。

  6. このプロセスは、ps/タスク マネージャーに java -jar "your jar file" ではなく "you_app_name" として表示されます。これにより、誤ったプロセスの追跡/管理が容易になります。開発環境では珍しいことではありません。

于 2009-01-26T12:10:29.927 に答える
5

他の回答は非常に技術的なものでしたが、私の意見では、それははるかに単純な理由によるものだと思います: ユーザー エクスペリエンス。

エンドユーザーは、それを機能させるために何もする必要はありません。(はい、別の VM を使用したり、VM に引数を渡したりしたい場合は、大騒ぎすることができますが、そうする必要はありません)。

プログラムをインストールして実行しようとすると、「java vm へのパスを入力してください」という DOS ボックスが表示されるか、さらに悪いことに、それをダブルクリックしても何も起こりません。バッチファイルを編集して機能させます。

これは 1996 年ではなく 2009 年です。最初にプログラムを実行するために、ユーザー (開発者でさえも!) がバッチ ファイルを編集する必要はありません。

于 2009-01-26T19:36:09.513 に答える