找不到H2捆绑依赖

时间:2018-04-17 06:44:28

标签: java h2 rcp

我在eclipse RCP应用程序中使用H2 bundle。它使用这样的java实现:

create alias MY_FUNCTION for "com.fun.MyFunctions.myFunction";

其中MyFunctions是公共类,myFunction是公共静态方法。

由于MANIFEST.MF中的以下声明,它适用于H2版本1.3.170或更早版本:

DynamicImport-Package: *

较新的H2版本不再具有此声明,因此我获得了ClassNotFound异常。

在H2的git日志中我发现以下注释(对于提交删除DynamicImport):

  

改进了OSGi支持。 H2现在将自己注册为DataSourceFactory   服务。修复问题365。

文档不是很有帮助: http://www.h2database.com/html/tutorial.html#osgi

您是否知道我现在如何添加我的依赖项?

1 个答案:

答案 0 :(得分:1)

H2转而使用DataSourceFactory,因为它是一种更好(并且独立于提供者)获取DriverDataSource的方式。它实际上与DynamicImport-Package: *的存在没有特别的关系。可能会特别添加使用通配符动态导入以解决您的用例,但它基本上是一个非常差的模块化实践,并且可以导致所有各种各样的问题。例如,在删除捆绑包之后,无法阻止H2尝试加载您的功能。

假设您的功能过于复杂,您可能最好将其注册为Java源代码。这解释为in the H2 docs并且不太复杂。实际上,您可以注册别名,但使用美元符号标记Java源:

CREATE ALIAS MY_FUNCTION AS $$
String myFunction(String arg) {

    // Your implementation goes in here

    return arg;
}
$$;