找不到 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
,因为这是获得 Driver
或 DataSource
的更好(且独立于提供商)的方式。它实际上与 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;
}
$$;
我在 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
,因为这是获得 Driver
或 DataSource
的更好(且独立于提供商)的方式。它实际上与 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;
}
$$;