java - Eclipse:在Linux下启动自定义eclipse应用程序会立即返回命令行提示符

标签 java eclipse osgi eclipse-pde

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

到目前为止,它运行良好,我可以在基于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之类的东西,但是一切都具有相同的效果。没有输出,什么都没有。

谢谢
克里斯多夫

最佳答案

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

是的,我想我是偶然发现的。
我尚不确定根本原因是什么,但我知道哪种症状会导致启动问题。

基本上,我认为这与我的构建过程和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文件。

我还验证了我在本地Ubuntu计算机上的运行情况,在不工作的情况下,它给了我比Debian计算机更多的输出。

当它在Ubuntu下无法正常工作时,我会得到以下信息:


  $ ./日食
  
  (。:26981):GLib-GObject-WARNING **:
  无效的(NULL)指针实例
  
  (。:26981):GLib-GObject-CRITICAL **:
  g_signal_connect_data:断言
  “ G_TYPE_CHECK_INSTANCE(实例)”
  失败了
  
  (。:26981):Gtk-关键**:
  gtk_settings_get_for_screen:断言
  “ GDK_IS_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-关键**:
  gtk_settings_get_for_screen:断言
  “ GDK_IS_SCREEN(屏幕)”失败
  
  (。:26981):GLib-GObject-CRITICAL **:
  g_object_get:断言G_IS_OBJECT
  (对象)'失败
  
  (。:26981):Gtk-警告**:
  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-关键**:
  gtk_icon_theme_get_for_screen:
  断言“ GDK_IS_SCREEN(屏幕)”
  失败了
  
  (。:26981):Gtk-关键**:
  gtk_settings_get_for_screen:断言
  “ GDK_IS_SCREEN(屏幕)”失败
  
  (。:26981):Gtk-关键**:
  gtk_icon_size_lookup_for_settings:
  断言“ GTK_IS_SETTINGS(设置)”
  失败了
  
  (。:26981):Gtk警告**:无效
  图标大小6
  
  (。:26981):Gtk-关键**:
  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 ...)

结论
我认为根本原因是,我的targetplatform或delta-pack有点不一致/损坏/混乱。也许我在制作无头PDE的方式上也做错了事,但到目前为止我还不能说清楚,因为它似乎可以工作……有时……有时不行:)

我通过将cordicant文件夹与包含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文件。

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

关于java - Eclipse:在Linux下启动自定义eclipse应用程序会立即返回命令行提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333090/

相关文章:

java - Eclipse 测试运行在与构建目录不同的目录中查找类

java - 在 OSGI 中嵌入传递依赖

java - 如何从驻留在 OSGi 包中的类获取 JNI 中的 jclass

java - 使用 Camel 作为具有 REST 服务的快速后端总线

java - 为什么我的程序无法识别文本文件中的所有名称?

java - 启动时线程崩溃的代码(android初学者)

java - 瓷砖网格世界创建麻烦

eclipse - 在Eclipse中仅格式化选定的代码

java - 如何编译不同版本的maven web项目并在不同版本运行

spring - 新项目应该使用 Spring DM 2.0.0.M1 还是 Gemni Blueprint 1.0.0.M1?