如何将jar正确添加到eclipse包中

时间:2012-10-16 16:52:50

标签: eclipse hibernate osgi

我有点问题。我想在eclipse rcp中使用hibernate。 (我是osgi和eclipse rcp的新手)。所以我将jar添加到plugin-project文件夹以及构建路径和bundle构建路径中,但是当我尝试从我的bundle中使用hibernate时,它会因ClassNotFoundException而崩溃。

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

2 个答案:

答案 0 :(得分:0)

请看看eclipse伙伴政策。如果您因为osgi类加载而面临未加载的课程,这可能会对您有所帮助。

答案 1 :(得分:0)

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

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

Eclipse Buddy政策就像是这个栅栏上的一个巨大漏洞,让事情回归到他糟糕的旧类路径:线性搜索。使用好友策略,Eclipse将开始搜索是否存在具有该名称的某个类。由于这会忽略版本,因此您无法再依赖正确的版本处理。好消息是它大部分时间都有效。坏消息是你失去了隐私,当它失效时你会得到奇怪的错误。

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

要处理类加载黑客攻击OSGi使用服务的问题。