让RCP应用程序运行

时间:2013-10-14 12:10:46

标签: java maven osgi rcp

我继承了一个用java编写的用于RCP框架的应用程序(eclipse)。

代码附带了构建系统(maven)和pom文件,似乎一切都在构建。

然而,最终的应用程序exe无法运行。我得到一个错误的弹出窗口,然后是一个描述大量错误的日志文件的链接。问题是,我在RCP上很新,我几乎不知道OSGI是什么,我不明白所有的maven。所以我很难弄清楚问题是什么,甚至在哪里开始。

日志文件的开头如下:

  

!ENTRY org.eclipse.osgi 4 0 2013-10-14 13:38:14.717!MESSAGE   应用程序错误!STACK 1 java.lang.RuntimeException:Application   无法找到“com.company.prod.app.rcp.application”   注册表中。可用的应用程序是:   org.eclipse.equinox.app.error,   org.eclipse.help.base.infocenterApplication,   org.eclipse.help.base.helpApplication,   org.eclipse.help.base.indexTool。在   org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)     在   org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)     在   org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)     在   org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)     在   org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)     在   org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)     在java.lang.reflect.Method.invoke(Method.java:597)at   org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)at at   org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)at at   org.eclipse.equinox.launcher.Main.run(Main.java:1311)

     

!ENTRY org.eclipse.osgi 2 0 2013-10-14 13:38:14.751!MESSAGE One或   由于以下根约束,因此未解析更多捆绑包   未解决:!SUBENTRY 1 org.eclipse.osgi 2 0 2013-10-14   13:38:14.751!MESSAGE Bundle   update@plugins/com.company.prod.app.data_2.0.5-SNAPSHOT.jar不是   解决。 !SUBENTRY 2 com.company.prod.app.data 2 0 2013-10-14   13:38:14.751!MESSAGE缺少导入的包microsoft.sql_0.0.0。

     

!ENTRY org.eclipse.osgi 2 0 2013-10-14 13:38:14.778!MESSAGE   以下是未解析的捆绑包的完整列表,请参阅   根本原因的先前日志条目(如果存在):

然后继续列出应用程序中的每个包,列为0.0.0版。我假设版本号与问题有关,因为它们当然都没有版本0.0.0。

搜索所有pom.xml文件不会将单个依赖项列为版本0.0.0。

我不明白作为“root”原因提到的microsoft.sql_0.0.0导入包的来源。我知道代码使用microsoft.sqlserver。它被导入一个java文件,如下所示:

import com.microsoft.sqlserver.jdbc.SQLServerException;

包含该import语句的包已将microsoft.sqlserver列为依赖项,如下所示:

<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>sqljdbc</artifactId>
  <version>4.0</version>
</dependency>

此外,还有一个导出它的“捆绑”(?),如下所示:

<Export-Package>
    org.hsqldb.*,
com.microsoft.sqlserver.*
</Export-Package>

所以,对我而言似乎是导出并正确导入。但我不明白maven那么好(或者它是osgi或rcp错误?甚至不确定)。

另外。我的maven存储库中有sqlserver.sqljdbc,位于:

.m2\repository\com\microsoft\sqlserver\sqljdbc\4.0

任何有关如何尝试解决此问题的提示都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

好的,这是我做的一些事情让它发挥作用。我不确定我是否理解了所有内容,但至少应用程序现在可以运行。

我没注意到缺少的导入是microsoft.sql而不是com.microsoft.sqlserver。我不知道microsoft.sql是什么,或者它是如何自动添加到清单文件中的导入的,但它是(可能是com.microsoft.sqlserver.XXXX使用它?)。将microsoft.sql添加到export-package解决了这个问题。

我不相信我的问题与版本0.0.0有任何关系。它似乎只是默认版本,必须在导出/导入部分显式声明才能更改,这在任何地方都不会发生。我把它与各部分搞混了。我不知道OSGI是什么,而且该项目使用的是felix插件。

答案 1 :(得分:0)

好的......我认为你应该首先了解Maven是如何运作的。 你读过Maven documentation了吗?当我第一次使用Maven时,我编写了一个小应用程序,使用Maven包含所有jar依赖项。

简短而有希望的简单解释: 使用Maven,您可以以这种方式管理项目外部的依赖项,所需的工件(即第三方JAR,如de Microsoft SQL驱动程序包)存储在Maven存储库中,并在需要时进行检索。通过这种方式,您可以构建一个中央集线器,用于管理构建工件,也可以使用不同版本。 0_0_0是声明的版本 - 请参阅依赖声明。

毕竟,我认为阅读OSGi article on wikipedia(如果你还没有)并开始使用eclipse RCP教程会很有帮助。日食RCP框架确实很复杂,所以要做出相应的计划。不幸的是,这不是在两三个下午学到的东西。