【问题标题】:Debugging BIRT ODA Driver in Eclipse SDK - NoClassDefFoundError在 Eclipse SDK 中调试 BIRT ODA 驱动程序 - NoClassDefFoundError
【发布时间】:2011-07-20 09:44:30
【问题描述】:

全部,

我不太确定这是否是 BIRT/Eclipse SDK/开发者问题...

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

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

由于事情一直不正常,我将在稍后解释,我还在 Eclipse SDK 工作区中创建了一个 HelloWorldX java 项目,它有一个名为 HelloThere 的类和一个静态方法,即:

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

我已将此作为项目引用添加到 Properties->Java Build Path 中的 ODA Driver 项目。

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

创建项目

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

这现在也调用了 HelloWorldX 项目。

开始调试会话

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

我通过单击调试工具栏项来启动调试会话。第一次提示我选择作为 Eclipse 应用程序运行。这会启动一个新的 Eclipse SDK 会话,我可以从 File->Open... 加载报表设计器文件...

报告加载到 Eclipse SDK IDE 中,如下所示:

我通过右键单击数据源并选择新数据源来创建一个新数据源。从 New Data Source 对话框中,选择我的 ODA Driver 的名称并单击 Next。这将显示一个带有测试连接按钮的对话框。

我点击了在 Connection#open 中的断点的测试连接按钮。

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

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

当我调用我引用的外部 JAR 文件中的任何旧代码时,也会引发异常。 Eclipse 在 OdaConnection.open(Properties) line: 267 的工作区中显示了一个窗口,它有 Source not found 和一个带有 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 驱动程序的人。我已经在整个互联网上寻找解决方案。我发现唯一相关的帖子是在 2007 年从未得到答案的 Eclipse 论坛上!!! See Eclipse Community Forums

编辑

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

D:\Software\Eclipse\eclipse-SDK-3.7-win32\eclipse\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar

结束编辑

谢谢

安德斯

【问题讨论】:

    标签: eclipse debugging eclipse-plugin birt


    【解决方案1】:

    试了各种办法,终于破解了。

    遵循集成和扩展 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 驱动程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多