gpt4 book ai didi

java - 在 NetBeans 平台之外使用 Lookup API

转载 作者:行者123 更新时间:2023-11-30 06:35:20 26 4
gpt4 key购买 nike

我正在尝试评估我们的商店是否适合在没有整个 NetBeans 平台的情况下使用 NetBeans Lookup API。

到目前为止,我设法用这段代码创建了一个项目:

 for (SomeInterface si : Lookup.getDefault().lookupAll(SomeInterface.class)) {
si.doSomething();
}

我还创建了几个其他项目,每个项目都有一个实现 SomeInterface 的 AnImplementation 类,以及附带的文件 META-INF/services/path.to.SomeInterface 包含引用该类的行(例如“other.path.to .AnImplementation").

当我将这些实现项目添加到 NetBeans IDE 中主项目的库(依赖项)时,它工作正常,我可以从两个实现中看到 doSomething() 的连续结果。

我的问题是如何在不引用主项目中的子项目的情况下使它工作;子项目的jar在构建时不会包含在主项目生成的jar中,可以随意添加或删除它们,改变上面代码的结果。

如果我没记错的话,这是 Lookup API 文档中宣传的行为。提前致谢。

编辑:目前,我的结论是,如果没有 NetBeans 平台(或 OSGi?),就不可能在启动时检测到哪些服务提供者存在。您需要在类路径中引用它们的 jar,从而在启动前识别它们。随时证明我错了。

最佳答案

您必须在调用应用程序中引用子项目,因为这会将其放在类路径中 - 如果 jar/库不在类路径中,那么 Lookup 和 ServiceLoader 等 API 将无法找到它。

如果您使用 OSGI 或 NetBeans 平台,这些系统允许您在运行时更改类路径。

Geertjans blog有一个关于这个的条目(使用 NetBeans 平台之外的 Lookup API),在他的博客中他还引用了 John O'Connors blog对比 ServiceLoader 和 Lookup API

编辑

我刚看到Jon Skeets'回答 similar question .您可以使用 -Djava.ext.dirs=lib 属性将文件夹(在本例中为“libs”)设置为必须为您的类路径查找 jar 的位置。

关于java - 在 NetBeans 平台之外使用 Lookup API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180945/

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