获取RCP应用程序运行

问题描述:

我已经继承了用Java编写的用于RCP框架(eclipse)的应用程序。获取RCP应用程序运行

该代码附带了构建系统(maven)和pom文件,并且所有内容都可以构建。

然而,最终的应用程序exe无法运行。我得到一个带有错误的弹出窗口,然后指向描述许多错误的日志文件的链接。问题是,我在RCP方面很新,我几乎不知道OSGI是什么,并且我不了解所有的maven。所以我很难找出问题所在,甚至从哪里开始。

日志文件开始时是这样的:!

ENTRY org.eclipse.osgi 4 0 2013年10月14日13:38:!14.717留言 应用程序错误堆栈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) 在 有机eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 在 组织。 eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invok E0(本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke( Method.java:597)维持在 org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)在 组织。 eclipse.equinox.launcher.Main.run(Main.java:1311)

!ENTRY org.eclipse.osgi 2 0 2013-10-14 13:38:14.751!MESSAGE One or 更多的bundle没有解析,因为未解决以下根约束 :!SUBE NTRY 1 org.eclipse.osgi 2 0 2013-10-14 13:38:14.751!MESSAGE Bundle [email protected]/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 Missing imported package 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; 

和包含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 

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

好的,这里有一些我做的工作。不知道我还了解一切,但至少应用程序现在可以运行。

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

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

好的......我想你应该首先理解Maven是如何工作的。 您是否看过Maven documentation?当我第一次使用Maven时,我编写了一个小应用程序,使用Maven来包含所有的jar依赖项。

作为短,希望简单的解释: 与Maven可以管理项目外部依赖性以这样的方式,在需要的工件(即第三方JAR文件,如de微软SQL驱动程序包)存储在Maven仓库和如果需要可以检索有了这个,你可以建立一个中心中心来管理你的构建工件,也可以用不同的版本。 0_0_0是声明的版本 - 请参阅依赖声明。

毕竟,我认为阅读OSGi article on wikipedia(如果你还没有的话)并从eclipse RCP教程开始会很有帮助。 eclipse RCP框架确实很复杂,因此应该做相应的规划。不幸的是,这不是在两三个下午学到的东西。