1

我正在开发一个基于 Eclipse/Equinox 的 OSGI WebApplication(使用嵌入式 Jetty)并使用无头 PDE-Build 来构建应用程序。我的构建为 Linux GTK 创建了一个 zip 文件,为我的本地 macosx 创建了一个。

到目前为止效果很好,我可以在基于 Debian 的服务器上解压缩 linux zip 文件,然后从命令行运行./eclipse,应用程序就会启动。

昨天我准备好一个新的构建并部署它,解压缩它并启动./eclipse并没有发生任何事情。没有输出……什么都没有。它立即返回给我命令行提示符。

christoph@myserver:~/myapp$ ./eclipse 
christoph@myserver:~/myapp$

之后我尝试的是使用Equinox启动器手动启动:

christoph@myserver:~/myapp$ java -jar plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar

这看起来好多了,应用程序似乎像往常一样启动....但是大约 10 秒后它在启动过程中停止了,我又回到了命令行提示符处。

有没有人知道可能是什么原因或我如何调试 eclipse 启动文件发生的事情?我想我已经好几个星期没有更改构建脚本中的任何内容,并且生成的 zip 文件具有以前的通常大小。我还重新启动了服务器。

我尝试过./eclipse -noexit./eclipse -debug./eclipse -clean./eclipse -refresh./eclipse -vm /path/to/my/jdk/java之类的东西,但一切都具有相同的效果. 没有输出,什么都没有。

谢谢克里斯托夫

4

2 回答 2

1

更新:这个问题已经解决了。滚动到此答案的底部以获取解决方案。

是的,我想我找到了它……巧合。我还不确定根本原因是什么,但我知道是哪种症状导致了启动问题。

基本上我认为它与我的构建过程和 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 启动器文件夹/ja​​r 中是否存在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

于 2010-02-26T12:04:51.010 回答
0

如果没有生成日志文件,则可能是由于故障eclipse.ini(例如其中一行内容的末尾有多余的空格eclipse.ini

.ini文件最近是否以某种方式更改?
(或者参考您看到此问题的部署服务器上不再可用的路径?)

于 2010-02-25T11:31:06.477 回答