我在 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
,因为它是获取 Driver
或 DataSource
的更好(并且独立于提供商)的方式。它实际上与 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/