我正在尝试构建一个RCP应用程序,该应用程序已从最初使用PDE构建的旧项目中恢复过来。在Tycho的帮助下,完成了向maven的移植,现在我可以在Windows下创建eclipse.exe。该应用程序使用捆绑软件和功能。构建针对的是Mars版本的Eclipse。
目录结构如下:
parent dir -
- dfi-admin-bundle (packaging eclipse-plugin)
- dfi-admin-feature (packaging eclipse-feature)
- dfi-admin-mars (holds the eclipse-target-definition)
- dfi-p2deps (with a p2 repository created with p2-maven-plugin)
- dfi-eclipse-repository (packaging eclipse-repository and creates the
product using tycho-p2-director-plugin and the materialize-products goal)
一切正常,直到我启动该应用程序。然后,我得到一个窗口,告诉我有关错误和日志文件的信息。日志文件显示我缺少一个类。
org.osgi.framework.BundleException: Error starting module.
at org.eclipse.osgi.container.Module.doStart(Module.java:580)
at org.eclipse.osgi.container.Module.start(Module.java:439)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:454)
at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:531)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:324)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:327)
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:402)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:573)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:191)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at de.danet.dfi.gui.admin.Activator.<clinit>(Activator.java:13)
我正在确定问题是缺少包含LoggerFactory实现的jar。这就是我使用p2存储库设置dfi-p2deps目录的原因。在此存储库中,repository / plugins目录中有log4j.over.slf4j_1.7.14.jar和slf4j.api_1.7.14.jar。生成的产品在我创建的p2存储库的plugins目录中不包含两个jar。
如果我理解正确,则需要在分发包的META / MANIFEST.MF文件中声明此依赖关系,但似乎根本无法正常工作。也许这不是正确的方法。
顺便说一句,无论org.eclipse.tycho:target-platform-configuration中的pomDependencies设置如何,都会发生这种情况。 (考虑或为空)
关于如何配置构建以将所需的jar添加到RCP,有人对我有提示吗?我正在想这些因缺少日志记录类而导致的错误只是冰山一角,还会显示出更多缺少的依赖项。
这是dfi-admin-feature / feature.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="dfi-admin-feature"
label="%featureName"
version="0.2.1.qualifier">
<description>
%description
</description>
<copyright>
%copyright
</copyright>
<license url="%licenseURL">
%license
</license>
<plugin
id="dfi-admin-bundle"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
以及产品文件:
<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>
<product name="DFI-Admin Product" uid="dfi-admin.product.id" id="dfi-admin.product" application="dfi-admin-bundle.application" version="0.2.0.qualifier" useFeatures="true" includeLaunchers="true">
<configIni use="default">
</configIni>
<launcherArgs>
</launcherArgs>
<plugins>
</plugins>
<features>
<feature id="dfi-admin-feature"/>
<feature id="org.eclipse.rcp"/>
<feature id="org.eclipse.equinox.p2.user.ui"/>
<feature id="org.eclipse.emf.ecore"/>
<feature id="org.eclipse.ecf.filetransfer.httpclient4.feature"/>
<feature id="org.eclipse.ecf.filetransfer.httpclient4.ssl.feature"/>
<feature id="org.eclipse.equinox.p2.extras.feature"/>
<feature id="org.eclipse.emf.common"/>
<feature id="org.eclipse.equinox.p2.core.feature"/>
<feature id="org.eclipse.ecf.core.feature"/>
<feature id="org.eclipse.equinox.p2.rcp.feature"/>
<feature id="org.eclipse.ecf.filetransfer.feature"/>
<feature id="org.eclipse.ecf.core.ssl.feature"/>
<feature id="org.eclipse.ecf.filetransfer.ssl.feature"/>
<feature id="org.eclipse.e4.rcp"/>
</features>
<configurations>
<plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="4" />
<plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.p2.reconciler.dropins" autoStart="true" startLevel="4" />
<plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
<plugin id="org.eclipse.update.configurator" autoStart="true" startLevel="4" />
<property name="org.eclipse.update.reconcile" value="false" />
</configurations>
</product>