【问题标题】:How to add jars properly to a eclipse bundle如何将 jar 正确添加到 Eclipse 包中
【发布时间】:2012-10-06 20:19:56
【问题描述】:

我遇到了一个小问题。我想在 Eclipse rcp 中使用休眠。 (我是 osgi 和 eclipse rcp 的新手)。所以我将 jar 添加到 plugin-project 文件夹以及构建路径和包构建路径中,但是当我尝试从我的包中使用休眠时,它会因 ClassNotFoundException 而崩溃。

这样做的正确方法是什么?

【问题讨论】:

    标签: eclipse hibernate osgi


    【解决方案1】:

    请查看 Eclipse 好友政策。如果您因osgi 类加载而面临类未加载,这可能会对您有所帮助。

    【讨论】:

      【解决方案2】:

      Hibernate 和许多其他经典 Java 程序 (ab) 使用动态类加载来连接不同的部分。他们使用的类是从文件中读取的,然后用 Class.forName 加载。这基本上不是模块化的,因为这些类根据定义是实现类,应该隐藏。

      由于 OSGi 是一个模块化框架,它在模块(捆绑包)周围设置了栅栏,并拒绝加载任何未正确导出和导入的内容。因此,如果 Hibernate 执行其 Class.forName ,它将直接进入这个围栏,因为它应该获得模块化的优势。

      Eclipse Buddy 策略就像这道栅栏上的一个大洞,将事物移回糟糕的旧类路径:线性搜索。使用伙伴策略,Eclipse 将开始搜索某处是否有具有该名称的类。由于这会忽略版本,因此您不能再依赖正确的版本处理。好消息是它在大多数情况下都有效。坏消息是你失去了隐私,当它不起作用时,你会遇到奇怪的错误。

      对于 Hibernate,唯一的解决方案是不使用文本文件设置,而是使用 API 并为 Hibernate 提供实际的类。在这些情况下,Hibernate 将使用这些类的类加载器并且有效。在 OSGi 中,只要遵循 Java 语言规则就没有问题。

      处理类加载黑客解决 OSGi 使用服务的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多