为什么 Eclipse 使用原生启动器?

2022-09-02 12:09:21

Eclipse the IDE是用Java编写的大型桌面应用程序的最佳示例之一。

我见过的大多数Java应用程序通常依靠批处理或shell脚本来构建具有应用程序类路径的字符串,并使用类路径作为env变量启动JVM。

另一方面,Eclipse依赖于本机启动器。为什么?这个启动器做了什么脚本没有?

我记得大约一年半前读过一篇文章,其中解释说“我们最好使用本地发射器”,但id没有解释发射器的内部工作原理。


答案 1

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 文件更新后中断。

相反,您可能希望查找匹配的文件。值得庆幸的是,Eclipse-wiki包含了在这种情况下有用的适当脚本模板
如果你想避免修改现有的脚本,你也可以搜索Equinox Launcher插件,将其复制到Eclipse主目录,并将副本重命名为startup.jar。org.eclipse.equinox_*.jar


答案 2

其中一些是特定于窗口的,有些是通用的。

  1. 与使用目标平台的本机可用脚本语言的批处理脚本相比,您的 shell 集成有了很大的改进。

  2. 无需启动其他进程来执行脚本(如果将 IDE 本身作为生成/测试/部署周期的一部分编写脚本,则这可能是一件大事。

  3. 可执行标头通常定义程序的“位”。因此,可执行文件可以明确指示它是允许/不允许32或64位执行。

  4. Windows 上的可执行文件可以进行加密签名。

  5. 许多恶意软件/防火墙防护程序维护每个可执行白名单。因此,当启动eclipse(并且它会在网络上检查自己的更新)时,它会更好,因为它第一次显示弹出窗口“Eclipse正在尝试访问互联网”,而不是通用的“javaw.exe正在尝试访问互联网”。它还允许用户更精细地控制此行为。

  6. 该过程将在ps/任务管理器上显示为“you_app_name”,而不是java -jar“您的jar文件”。这样可以更轻松地跟踪/管理错误进程。这在开发环境中并不少见。


推荐