【问题标题】:Eclipse: starting custom eclipse app under linux returns to the command line prompt instantlyEclipse:在linux下启动自定义eclipse app 立即返回命令行提示符
【发布时间】:2011-01-20 22:39:27
【问题描述】:

我正在开发一个基于 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 但一切都具有相同的效果。没有输出,什么都没有。

谢谢 克里斯托夫

【问题讨论】:

  • eclipse 目录中应该有一些日志文件。该文件将包含根本原因。
  • 我忘了说:没有创建日志文件。我知道通常配置目录包含像 1267091477938.log 这样的日志文件。但是当我从 ./eclipse 开始时,没有创建日志文件。当我从 java -jar ... 开始时,有一个包含信息的日志文件,但这不是我想要的。我想知道为什么 ./eclipse 不起作用。还有其他想法吗?谢谢:)

标签: java eclipse osgi eclipse-pde


【解决方案1】:

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

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

基本上我认为这与我的构建过程和 Delta-pack 以及以下 jar 文件/文件夹的竞争条件有关:

文件夹:org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520

对比

Jar: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 在这个文件夹中是 NOT 的。

我还在我的本地 Ubuntu 机器上验证了这一点,这在 不工作的情况下给了我比 Debian 机器更多的输出。

当它不在 Ubuntu 下工作时,我得到了这样的结果:

$ ./eclipse

(.:26981): GLib-GObject-WARNING **: 无效(NULL)指针实例

(.:26981): GLib-GObject-CRITICAL **: g_signal_connect_data:断言 `G_TYPE_CHECK_INSTANCE(实例)' 失败

(.:26981): Gtk-CRITICAL **: gtk_settings_get_for_screen:断言 `GDK_IS_SCREEN (screen)' 失败

(.:26981): GLib-GObject-CRITICAL **: g_object_get:断言`G_IS_OBJECT (对象)'失败

(.:26981): GLib-GObject-WARNING **: 类型为“gboolean”的gboolean' is invalid or out of range for property visible' 类型的值“TRUE”

(.:26981): Gtk-CRITICAL **: gtk_settings_get_for_screen:断言 `GDK_IS_SCREEN (screen)' 失败

(.:26981): GLib-GObject-CRITICAL **: g_object_get:断言`G_IS_OBJECT (对象)'失败

(.:26981): Gtk-WARNING **: 屏幕 GtkWindow 未设置;你必须始终设置 使用前的 GtkWindow 屏幕 窗户

(.:26981): Gdk-CRITICAL **: gdk_pango_context_get_for_screen: 断言`GDK_IS_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:断言`上下文 != NULL' 失败

(.:26981): Pango-CRITICAL **: pango_layout_set_text:断言 `layout != NULL' 失败

(.:26981): Pango-CRITICAL **: pango_layout_set_attributes:断言 `layout != NULL' 失败

(.:26981): Pango-CRITICAL **: pango_layout_set_alignment:断言 `layout != NULL' 失败

(.:26981): Pango-CRITICAL **: pango_layout_set_ellipsize:断言 `PANGO_IS_LAYOUT(布局)'失败

(.:26981): Pango-CRITICAL **: pango_layout_set_single_paragraph_mode: 断言“PANGO_IS_LAYOUT(布局)” 失败

(.:26981): Pango-CRITICAL **: pango_layout_set_width:断言 `layout != NULL' 失败

(.:26981): Pango-CRITICAL **: pango_layout_get_extents:断言 `layout != NULL' 失败

(.:26981): Gtk-CRITICAL **: gtk_icon_theme_get_for_screen: 断言`GDK_IS_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(设置)” 失败

(.:26981): Gtk-警告 **: 无效 图标大小 6

(.:26981): Gtk-CRITICAL **: gtk_icon_theme_load_icon:断言 `GTK_IS_ICON_THEME (icon_theme)' 失败的分段错误

在托管的 Debian 机器 (vserver.de) 上,我得到了 NO 输出,如上面我的开场问题所述。

可能在构建过程中有时使用前者,有时使用后者。我目前无法解释原因。我还注意到该文件夹​​用于普通的 _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 文件。

2010/03/01 更新:在另一个说明中,我发现 SVN 默认忽略文件扩展名 .so 这也是我的问题的根源。 我上面描述的我的解决方案到目前为止只在本地工作,这是正确的。 但是今天我想检查从我的构建服务器出来的构建是否最终也是正确的并且令人惊讶......它们仍然被破坏了。我立即检查了启动器插件文件夹,发现..eclipse_1206.so 再次丢失。然后我检查了 SVN 存储库,确实该文件不存在。事实证明,SVN 默认会忽略我现在在这里描述的那些文件:SVN ingnores .so files by default

【讨论】:

  • 好的,现在很清楚了。原因是目标平台搞砸了,很可能是在我早期设置构建并使用无头 PDE 构建执行我的第一步时。我可能自己修改了启动器 jar 并意外删除了 eclipse_1206.so 文件。我想我记得之前在 feature.xml 左右的插件的 unpack-option 遇到了困难。我刚刚下载了 Eclipse 3.5 的最新 delta-pack 并验证了内容。 eclipse_1206.so 在那里。现在构建工作可靠。
【解决方案2】:

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

.ini 文件最近是否发生了某种变化?
(或者参考您发现此问题的部署服务器上不再可用的路径?)

【讨论】:

  • 我看了看,但看不到任何明显的东西。它变得更加混乱。相同的构建在 ubuntu 下启动,但不再在 Debian 下启动。但是最近两周在 Debian 下的早期版本运行良好。该死的,这似乎是一个难以破解的坚果。我想知道调查的方向。是操作系统,是构建过程,还是 JVM?好的,我会继续。无论如何感谢您的帮助:)
  • 更正:我错了:同样的构建在 ubuntu 下没有启动。
  • @Christoph:您是否尝试过使用自己的 eclipse.ini,例如 stackoverflow.com/questions/142357/…
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多