java - 未找到 H2 bundle 依赖项

标签 java h2 rcp

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

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

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

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

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: * 的存在没有特别关系。通配符动态导入的使用可能是专门为了解决您的用例而添加的,但这从根本上来说是一种非常糟糕的模块化实践,并且可以导致各种问题。例如,在您的 bundle 被删除后,无法阻止 H2 尝试加载您的函数。

假设您的函数不太复杂,您最好将其注册为 Java 源代码。这是解释in the H2 docs并且做起来并不太复杂。实际上,您注册了别名,但 Java 源代码用美元符号标记:

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

    // Your implementation goes in here

    return arg;
}
$$;

关于java - 未找到 H2 bundle 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871499/

相关文章:

java - java中如何将键盘按下的符号输入到标签中?

java - 无法到达服务器时程序关闭

java - 无法从另一个类调用方法

java - 构造函数及其使用方式

java - 覆盖 JComboBox 默认颜色

java - H2 postgresql 模式似乎对我不起作用

database - H2 数据库可以有多大?

java - H2内存数据库和自定义@GenericGenerator策略

java - eclipse e4 RCP : Core Expressions - Something less XML-hell?

java - 当选择单选按钮时,RCP 部分打开为脏