gpt4 book ai didi

java - 未找到 H2 bundle 依赖项

转载 作者:行者123 更新时间:2023-12-02 11:21:43 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com