我正在尝试使用基于功能的 Maven/Tycho 构建 Eclipse RCP 应用程序。我的应用程序是一种简单的语言,带有一个编辑器(在 Xtext 的帮助下构建)和一些其他依赖于项目的插件。有一些 howtos 描述了如何创建一个 Eclipse RCP 应用程序,例如
http://mattiasholmqvist.se/2010/03/building-with-tycho-part-2-rcp-applications/
或者
https://kthoms.wordpress.com/2010/11/12/setting-up-a-rcp-product-for-a-dsl/
到目前为止,我做了什么:
创建了一个包含 feature.xml 的插件项目。feature.xml 由语言插件及其依赖项组成
创建了一个包含产品定义的插件项目。产品定义以插件项目名称命名(Mattias Homlqvist(本文中的第一个链接)强调 Tycho 对产品文件名做出假设(与插件项目名称相关))。在产品定义中,我创建了一个新产品并指向“org.eclipse.ui.ide.workbench”应用程序。我还在编辑器的依赖项选项卡中添加了我的功能插件以及 org.eclipse.pde 和 org.eclipse.rcp 功能。
如果我尝试运行该产品,则会出现异常:
java.lang.RuntimeException: No application id has been found.
at org.eclipse.equinox.internal.app.EclipseAppContainer.
startDefaultApp(EclipseAppContainer.java:242)
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:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.
run(EclipseStarter.java:179)
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:601)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
好吧,出了点大问题。现在,我正在检查是否在“插件”选项卡的运行配置对话框中添加了所有必需的插件。因此,未选择产品和功能插件。如果我按“添加所需插件”,则添加了产品插件,按“验证插件”会弹出并显示“未检测到问题”。如果我再次尝试运行该产品,我会得到同样的异常。在产品定义编辑器中按“同步”会恢复我所做的更改(产品和功能被取消选择) - 我想知道为什么?
Maven/Tycho 构建本身似乎可以工作。如果我正在尝试构建项目
mvn install
创建相应平台的 zip 文件。不幸的是,问题仍然存在,并且构建不可执行。所以,可能我在我的功能和/或产品插件项目中犯了一个可怕的错误。也许有人有想法或可以指出我正确的方向?
提前致谢!