找不到 H2 包依赖项

H2 bundle dependency not found

我在 Eclipse RCP 应用程序中使用 H2 包。它使用 java 实现方式如下:

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

其中 MyFunctions 是 public class 而 myFunction 是 public 静态方法。

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

DynamicImport-Package: *

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

在 H2 的 git 日志中,我发现了以下评论(对于删除 DynamicImport 的提交):

Improved OSGi support. H2 now registers itself as a DataSourceFactory service. Fixes issue 365.

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

你知道我现在如何添加我的依赖项吗?

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;
}
$$;