0

我继承了一个用 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: 找不到应用程序“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。

!ENTRY org.eclipse.osgi 2 0 2013-10-14 13:38:14.751 !MESSAGE 一个或多个捆绑包未解决,因为以下根约束未解决:!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。

我不明白被称为“根本”原因的 microsoft.sql_0.0.0 导入包从何而来。我知道代码使用 microsoft.sqlserver。它被导入到一个 java 文件中,如下所示:

import com.microsoft.sqlserver.jdbc.SQLServerException;

并且包含该导入语句的包将 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

任何有关如何尝试和解决此问题的提示将不胜感激。

4

2 回答 2

0

好的,这是我为使其正常工作所做的一些事情。不确定我是否仍然了解所有内容,但至少该应用程序现在可以运行。

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

我不相信我的问题与 0.0.0 版本有任何关系。似乎这只是默认版本,并且必须在要更改的导出/导入部分上明确声明,这在任何地方都不会发生。我把它和这些部分混在一起了。我不知道 OSGI 是什么,并且该项目正在使用 felix 插件。

于 2013-10-15T07:43:17.710 回答
0

好的...我认为您应该首先了解 Maven 的工作原理。你读过Maven 文档吗?当我第一次使用 Maven 时,我编写了一个小应用程序,使用 Maven 包含所有 jar 依赖项。

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

毕竟,我认为阅读wikipedia 上的 OSGi 文章(如果您还没有的话)并从 eclipse RCP 教程开始会很有帮助。eclipse RCP 框架确实很复杂,所以要相应地规划。不幸的是,这不是两三个下午学到的东西。

于 2013-11-08T10:02:05.383 回答