在Eclipse SDK中调试BIRT ODA驱动程序 - NoClassDefFoundError

时间:2011-07-20 09:44:30

标签: eclipse debugging eclipse-plugin birt

所有

我不太确定这是否是BIRT / Eclipse SDK / Developer问题......

我们正在研究BIRT for Eclipse SDK(Indigo)。我们投资了Jason Weathersby等人的“整合和扩展BIRT”一书。它将指导您完成创建第一个ODA驱动程序的过程,该驱动程序本质上是一个2个插件项目:ODA驱动程序和ODA驱动程序UI。不幸的是,它从未谈论任何细节的调试。

我们的想法是让ODA驱动程序与我们的应用程序连接以检索数据。我已经从Properties-> Java Build Path为我们的应用程序JAR文件添加了外部JAR参考到ODA驱动程序项目。它出现在Eclipse工作区中的Referenced Libraries下。我们的应用程序使用的所有引用的JAR也显示在Referenced Libraries下。

由于事情尚未完成,我将在稍后解释,我还在Eclipse SDK工作区中创建了一个HelloWorldX java项目,该项目有一个名为HelloThere的类,其中包含一个静态方法:

public static String getIt() 
{
    return "Ding Dong";
}

我已将此作为项目参考从Properties-> Java Build Path添加到ODA驱动程序项目。

所以我做了什么......

创建项目

我在Eclipse SDK IDE中创建了2个项目。 ODA驱动程序包含对我们在代码中调用的遗留应用程序JAR文件的引用。

现在也调用了HelloWorldX项目。

开始调试会话

我在Connection#open中添加了一个断点。这个断点在第一行。

我通过单击调试工具栏项来启动调试会话。第一次它提示我选择运行Eclipse Application。这将启动Eclipse SDK的新会话,我可以从File-> Open ...

加载报表设计器文件

报告按如下方式加载到Eclipse SDK IDE中:

BIRT Report Eclipse

通过右键单击“数据源”并选择“新建数据源”来创建新的数据源。在New Data Source对话框中,我选择我的ODA驱动程序的名称,然后单击Next。这将显示带有“测试连接”按钮的对话框。

我单击“测试连接”按钮,该按钮点击Connection#open中的断点。

当我跳过下面的代码时,我会抛出NoClassDefFoundError。

System.out.println(HelloThere.getIt());

当我调用我引用的外部JAR文件中的任何遗留代码时,也会抛出异常。 Eclipse在OdaConnection.open(Properties)行的工作区中显示一个窗口:267找不到Source,还有一个带有Edit Source Lookup Path的按钮......我尝试了不同的组合来设置应用程序的源路径。单击该按钮将显示以下对话框:

Edit Source Lookup Path

简而言之,堆栈跟踪如下:

org.eclipse.datatools.connectivity.oda.OdaException ;
    java.lang.NoClassDefFoundError: HelloWorld/HelloThere
        at org.eclipse.datatools.connectivity.oda.profile.OdaConnectionWrapper.open(OdaConnectionWrapper.java:215)
        at org.eclipse.datatools.connectivity.oda.profile.OdaConnectionWrapper.<init>(OdaConnectionWrapper.java:59)

... (some trace omitted as big!)

Caused by: java.lang.ClassNotFoundException: HelloWorld.HelloThere
      at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
      at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
      at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
      at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      ... 49 more

我是Eclipse的新手,所以请保持温柔。任何人都可以告诉我在哪里看或我应该发布的任何其他信息。我可能做的事情完全错了,但肯定不是第一个想要调试BIRT ODA驱动程序的人。我已经在互联网上寻找解决方案。我发现唯一相关的帖子是在Eclipse论坛上,这个论坛在2007年从未得到过回复! See Eclipse Community Forums

修改

我已经使用System.getProperty(“java.class.path”,“。”)输入了一些代码来从我的ODA驱动程序输出类路径;

d:\ SOFTWARE \ Eclipse的\蚀-SDK-3.7的win32 \蚀\插件\ org.eclipse.equinox.launcher_1.2.0.v20110502.jar

结束编辑

由于

Andez

1 个答案:

答案 0 :(得分:2)

尝试了各种解决方案之后,我终于破解了它。

在按照集成和扩展BIRT CSV ODA驱动程序示例后,我注意到有一个Hibernate驱动程序。您可以从Actuate Site下载源代码。

这个驱动程序的组合方式不同。它具有在通过向导创建类路径时操作类路径的设置。遗憾的是,无法在我下载的Eclipse SDK版本中设置类路径 - Indigo。所以我想我会亲自去看看差异。

要执行此操作,您只需在Eclipse IDE中打开MANIFEST.MF。

build.properties标签

包括您要引用/包含的所有jar文件,如下所示:

source.odasentinel.jar = src/
output.odasentinel.jar = bin/
bin.includes = plugin.xml,\
           META-INF/,\
           odasentinel.jar,\
           lib/activation.jar\

...

MANIFEST.MF标签

将Bundle-ClassPath设置设置为包含您要引用/包含的所有jar文件,如下所示:

Bundle-ClassPath: odasentinel.jar,
 lib/activation.jar,
 lib/bsh-2.0b2.jar,
 lib/comm.jar,

您现在可以使用Eclipse运行和调试ODA驱动程序。