RCP应用程序缺少必需的jar

时间:2019-01-08 14:02:50

标签: maven eclipse-rcp rcp tycho

我正在尝试构建一个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>

0 个答案:

没有答案