更新:这个问题已经解决了。滚动到此答案的底部以获取解决方案。
是的,我想我找到了它……巧合。我还不确定根本原因是什么,但我知道是哪种症状导致了启动问题。
基本上我认为它与我的构建过程和 Delta-pack 以及以下 jar 文件/文件夹的竞争条件有关:
文件夹:org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520
对比
罐子:org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.200.v20090519.jar
我偶然发现的地方是我在构建过程中看到的一些消息,但从未真正考虑过:例如
[java] [eclipse.generateFeature] 捆绑 org.eclipse.equinox.launcher.gtk.linux.x86:[java] [eclipse.generateFeature] 选择的另一个单例版本:org.eclipse.equinox.launcher.gtk.linux.x86_1。 0.200.v20090520
这听起来像是处理过的构建选择了其他东西......?!?这对我来说似乎很奇怪。
在它工作的情况下,这个 jar 文件被提取(所以它是一个名为org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520的文件夹)并且这个文件夹包含一个名为eclipse_1206.so的文件.
在它不起作用的情况下,还有一个名为org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520的文件夹,但文件eclipse_1206.so不在此文件夹中。
我还在我的本地 Ubuntu 机器上验证了这一点,在不工作的情况下,这给了我比 Debian 机器更多的输出。
当它不在 Ubuntu 下工作时,我得到了这样的结果:
$ ./日食
(.:26981): GLib-GObject-WARNING **: 无效 (NULL) 指针实例
(.:26981): GLib-GObject-CRITICAL **: g_signal_connect_data: 断言 `G_TYPE_CHECK_INSTANCE (instance)' 失败
(.:26981): Gtk-CRITICAL **: gtk_settings_get_for_screen: 断言 `GDK_IS_SCREEN (screen)' 失败
(.:26981): GLib-GObject-CRITICAL **: g_object_get: 断言 `G_IS_OBJECT (object)' 失败
(.:26981): GLib-GObject-WARNING **:gboolean' is
invalid or out of range for property
类型为“gboolean”的可见类型的值“TRUE”
(.:26981): Gtk-CRITICAL **: gtk_settings_get_for_screen: 断言 `GDK_IS_SCREEN (screen)' 失败
(.:26981): GLib-GObject-CRITICAL **: g_object_get: 断言 `G_IS_OBJECT (object)' 失败
(.:26981): Gtk-WARNING **: 未设置 GtkWindow 的屏幕;在使用该窗口之前,您必须始终为 GtkWindow 设置一个屏幕
(.:26981): Gdk-CRITICAL **: gdk_pango_context_get_for_screen: 断言 `GDK_IS_SCREEN (screen)' 失败
(.:26981): Pango-CRITICAL **: pango_context_set_font_description: 断言 `context != NULL' 失败
(.:26981): Pango-CRITICAL **: pango_context_set_base_dir: 断言 `context != NULL' 失败
(.:26981): Pango-CRITICAL **: pango_context_set_language: 断言 `context != NULL' 失败
(.:26981): Pango-CRITICAL **: pango_layout_new: 断言 `context != NULL' 失败
(.:26981): Pango-CRITICAL **: pango_layout_set_text: 断言“布局!= NULL”失败
(.:26981): Pango-CRITICAL **: pango_layout_set_attributes: 断言“布局!= NULL”失败
(.:26981): Pango-CRITICAL **: pango_layout_set_alignment: 断言“布局!= NULL”失败
(.:26981): Pango-CRITICAL **: pango_layout_set_ellipsize: 断言 `PANGO_IS_LAYOUT (layout)' 失败
(.:26981): Pango-CRITICAL **: pango_layout_set_single_paragraph_mode: 断言 `PANGO_IS_LAYOUT (layout)' 失败
(.:26981): Pango-CRITICAL **: pango_layout_set_width: 断言“布局!= NULL”失败
(.:26981): Pango-CRITICAL **: pango_layout_get_extents: 断言“布局!= NULL”失败
(.:26981): Gtk-CRITICAL **: gtk_icon_theme_get_for_screen: 断言 `GDK_IS_SCREEN (screen)' 失败
(.:26981): Gtk-CRITICAL **: gtk_settings_get_for_screen: 断言 `GDK_IS_SCREEN (screen)' 失败
(.:26981): Gtk-CRITICAL **: gtk_icon_size_lookup_for_settings: 断言 `GTK_IS_SETTINGS (settings)' 失败
(.:26981): Gtk-WARNING **: 无效的图标大小 6
(.:26981): Gtk-CRITICAL **: gtk_icon_theme_load_icon: 断言 `GTK_IS_ICON_THEME (icon_theme)' 失败分段错误
在托管的 Debian 机器(vserver.de)上,我没有得到任何输出,如上面我的开放问题中所述。
可能在构建过程中有时使用前者,有时使用后者。我目前无法解释原因。我还注意到该文件夹用于普通的 _x86(32 位)架构,而 jar 用于 x86_64(64 位)架构。不知道为什么选择 64,因为我没有在 build.properties 中指定 x86_64。
另外我不明白的是,生成的名为org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520的文件夹包含文件eclipse_1206.so,即使该文件仅存在于org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.200.v20090519.jar(注意...x86_64...)
结论
我认为根本原因是,我有某种不一致/损坏/混乱的目标平台或增量包。也许我在构建无头 PDE 的方式上也做错了什么,但到目前为止我还不能说,因为它似乎工作......有时......有时不是:)
我通过将一致的文件夹与包含eclipse_1206.so文件的文件夹交换来验证我上面的陈述,并且突然它起作用了。可重现。所以,如果你在 Linux 下也有类似的启动问题,不妨检查一下 Equinox 启动器文件夹/jar 中是否存在eclipse_1206.so(例如 org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520)
与此同时,我将调查根本原因是什么以及如何正确设置构建,并将在博客文章中写下来。
感谢到目前为止所有试图提供帮助的人。
克里斯托夫
更新解决方案:
解决方案是为 3.5 版本下载一个新的 Eclipse Deltapack,并将我的目标平台中的所有 ..launcher.. 插件替换为新的。问题是一个损坏的启动器插件,缺少eclipse_1206.so文件。
Update 2010/03/01: On another note,I found out that SVN by default ignores the file extension .so which was also a source of my problems.
My solution I described above was only working locally so far which was correct.
But today I wanted to check if the builds comming out of my build server are also correct finally and surprise..they were still broken. I instantly checked the launcher plugin folder and see..the eclipse_1206.so was missing again. Then I checked the SVN repository and really the file wasn't there. It turnes out that SVN ignores those files by default which I now have described here: SVN ingnores .so files by default