Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使RCP应用程序真正独立?_Java_Eclipse_Eclipse Rcp - Fatal编程技术网

Java 如何使RCP应用程序真正独立?

Java 如何使RCP应用程序真正独立?,java,eclipse,eclipse-rcp,Java,Eclipse,Eclipse Rcp,如果我创建无头Hello RCP应用程序 我可以在Eclipse调试器下运行它,就像运行任何普通java应用程序一样。它运行并将“HelloWorld”打印到Eclipse控制台中 现在,如何使它真正独立,即在没有当前Eclipse的情况下运行 导出到runnable JAR不适用于此类项目 导出到Eclipse产品也不适用于它 更新 如果我为项目创建产品文件,那么导出到产品开始工作,但应用程序本身在运行时开始崩溃。这可能是由于我在创建产品文件时的错误猜测 首先创建的产品文件在我看来没有填写

如果我创建
无头Hello RCP
应用程序

我可以在Eclipse调试器下运行它,就像运行任何普通java应用程序一样。它运行并将“HelloWorld”打印到Eclipse控制台中

现在,如何使它真正独立,即在没有当前Eclipse的情况下运行

导出到runnable JAR不适用于此类项目

导出到Eclipse产品也不适用于它

更新

如果我为项目创建产品文件,那么导出到产品开始工作,但应用程序本身在运行时开始崩溃。这可能是由于我在创建产品文件时的错误猜测

首先创建的产品文件在我看来没有填写完整:

尝试填充
产品
下拉列表我使用
新建
按钮,从当前项目创建产品

我在填充
应用程序
单元格时使用了一些猜测。我在那里设置了一些条目,它以某种方式与我当前的项目名称相对应

导致应用程序崩溃,但出现异常:

!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 03:29:41.305
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 13:32:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 13:32:36.300
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 19:04:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 19:04:36.695
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.RuntimeException: Could not find framework
        at org.eclipse.equinox.launcher.Main.getBootPath(Main.java:992)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:571)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
更新2

此FAQ条目描述了一些实际不起作用的过程

PLUGIN.XML

当向plugin.xml添加产品扩展点时,Eclipse警告

A minimum of 1 'provider' elements must be specified.
A minimum of 1 'product' elements must be specified.

FAQ中没有说明是否应该这样做以及如何这样做

假设我们保持原样

产品文件

稍后创建产品文件时,还不清楚如何填写:

如果按照FAQ中的说明填写(参见上文,仅设置了产品id),则生成的应用程序不会运行,但出现以下异常:

!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 03:29:41.305
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 13:32:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 13:32:36.300
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 19:04:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 19:04:36.695
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.RuntimeException: Could not find framework
        at org.eclipse.equinox.launcher.Main.getBootPath(Main.java:992)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:571)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
更新3

我发现了以下几点:

1) 应该在
plugin.xml
文件和
产品
文件中描述产品。在
plugin.xml
文件中,产品表示为对
org.eclipse.core.runtime.products
点(
tag
)的贡献。
plugin.xml
文件的这个标签可以通过
.product
文件创建向导,通过
New
按钮自动创建

2) 应用程序也在
plugin.xml
文件中表示为对
org.eclipse.core.runtime.applications
的贡献。在运行
.product
创建向导之前,应预先配置此项。
plugin.xml
文件中应用程序的
id
未完全限定。如果前面有插件名,则会显示FQN,插件名写在
MANIFEST.MF
文件中。所以,在运行
.product
创建向导时,应该计算并设置应用程序的FQN

3) 最终运行的结果不仅取决于上述所有内容,还取决于
Debug As->Debug Configurations
Run As->Run Configurations
。这里有一个
插件
选项卡,带有几个神奇的控件:

默认情况下,甚至不包括主应用程序

考虑到这一切,我几乎可以走完全程,但最终还是遇到了新的障碍:

运行最终导出的应用程序时,我遇到一个异常:

!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 03:29:41.305
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 13:32:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 13:32:36.300
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:633)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
!SESSION Wed Dec 18 19:04:36 MSK 2013 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2013-12-18 19:04:36.695
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.RuntimeException: Could not find framework
        at org.eclipse.equinox.launcher.Main.getBootPath(Main.java:992)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:571)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
更新4

org.eclipse.core.runtime
添加到
.product
文件的依赖项后,最后一个问题得到解决。下一个问题是例外

!SESSION 2013-12-18 19:43:31.136 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_40
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Command-line arguments:  -os win32 -ws win32 -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2013-12-18 19:43:31.924
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "MyApp.id1" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error.
    at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
    at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
(此运行中的应用程序id不同,但正确)

更新5

我发现我的应用程序类在导出目录中的任何位置都不存在

如何强制它去那里?

你需要的是在你的应用程序中添加一个。为您的RCP应用程序创建一个产品,然后关注教程的第2点(部署)


祝你好运。

请检查日志文件。启动时可能会发生一些异常。您可以在
/.metadata/.log
位置找到日志文件。

导出到Eclipse产品对它也不起作用
您的意思是创建产品文件并从那里导出应用程序不起作用吗?不。我不知道可以为此项目创建产品文件。这怎么可能?这一切对我来说简直是无稽之谈。请看我的更新:)@SuzanCioc这不是胡闹,你只要慢一点就行了-D
EclipseStarter
异常通常意味着缺少依赖项。此外,从现在起,你必须从产品文件启动应用程序,而不是从
plugin.xml
启动。它既不工作,也不慢也不快。大多数常见问题解答要么不相关,要么没有任何解释。难道不能从错误消息中推断缺少的依赖项吗?请参阅我的新重构问题: