问题标签 [serviceloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
170 浏览

java - 从 Serviceloader 获取的子类抛出 AbstractMethodError

我正在尝试制作一个 Java 应用程序,该应用程序可以加载实现抽象类的插件,并且在从 ServiceLoader 生成的实例中出现 AbstractMethodError。代码有点重,所以我在下面做了一个简化。

首先,我有一个抽象类:

它实现了以下接口:

我有一个服务提供商,它在 meta-inf/services 文件夹NotAbstractClass中扩展和声明:TheAbstractClass

然后在主应用程序(实际上是另一个应用程序中的插件)上,我想找到所有扩展的类TheAbstractClass

我的应用程序确实找到了NotAbstractClass. 我知道这一点,因为在 for 循环中,我可以这样做class.getName()并且它会给我anotherstuff.NotAbstractClass)但给出了错误: java.lang.AbstractMethodError: stuff.TheAbstractClass.getClassName()Ljava/lang/String;

我难住了。有什么建议吗?谢谢你,佩德罗

0 投票
1 回答
1005 浏览

java - 带有 maven 的 ServiceLoader,当 pom 中未给出依赖项时

我有一个 Maven 应用程序,我喜欢使用该ServiceLoader机制来加载插件。

目前,我通过将依赖项添加到 pom 来实现这一点,以便依赖项 jar 在类路径中,并且 ServiceLoader 可以将其拾取。

但是,如果不在 pom 中声明依赖关系,如何实现呢?

我不喜欢用每个要使用的插件来改变 pom。

我该怎么做 - 或者插件 jar 必须始终在 pom 中?

0 投票
0 回答
65 浏览

java - java中的泛型和服务

我的应用程序使用 ServiceLoader,我有两种类型的服务:算法和导出器。编码 :

我有另一个类,Executor,它将算法和导出器“连接”在一起:

团队成员为多种类型的事物独立编码算法和导出器。他们把它放在一个罐子里,注册算法或导出器的服务提供者,应用程序的核心在于组合这些模块。

我写了那个小测试:

但我预见到了未来的问题。由于加载器不知道算法或导出器的具体类型,我如何确定两者的组合是兼容的?或者有没有办法根据算法/导出的工作类型来过滤服务加载器中的服务?谢谢

编辑:为了更清楚:假设有人编写了一个模块算法,另一个编写了一个导出器。它们将在 ServiceLoader 中以相同的方式加载。有没有办法区分它们?

0 投票
2 回答
452 浏览

java - ServiceLoader 找不到插件

我有一个 ServiceLoader 试图加载任何扩展插件的东西。即使我设置了服务文件,它也没有找到任何东西。

源码(com.otabi.firestar.pajamatale.plugin.loader.PluginFinder是类):https ://github.com/firestar115/PajamaTale

插件:https ://github.com/firestar115/PajamaTest

我在这里做错了什么?为什么插件不显示并打印“Test Kappa”?

0 投票
0 回答
134 浏览

java - ServiceLoader 从不同的包加载

ServiceLocator我使用 ServiceProviderPattern编写了一个泛型。

如果我将服务作为依赖项添加到ServiceLocator抵抗的 maven 模块,它只会找到服务。如果这个服务使用它ServiceLocator本身,我将有一个循环依赖。

我需要ServiceLocator从未知的依赖项中加载类。

0 投票
2 回答
347 浏览

java - Java/Maven - 没有 SeviceLoader 覆盖的撒克逊人

我们正在构建一个公共组件,它是多个其他项目的依赖项。

我们的项目做了一些 XSLT 转换,我们需要使用 Saxon 引擎。

我们可以完全控制必须使用 Saxon 的特定 XSLT 转换,但无法控制依赖于我们的应用程序的类路径,并且我们不想强迫它们使用 Saxon 进行其他 XML 工作。

我们可以在使用这些工厂提供的 API 进行转换时直接手动调用 Saxon 库。

问题是 Saxon 使用该ServiceLoader模式将自己作为TransformerFactory实现注入,使用 jar 中的此文件:

这意味着将我们用作依赖项的应用程序最终可能会使用 Saxon 而不是其现有的 XML 库。要求这些应用程序更改其代码以调用其特定实现不是一种选择。

有什么方法可以“覆盖” Saxon 库以删除 ServiceLoader 实现?使用 Maven、Java 或其他进程?

0 投票
1 回答
387 浏览

java - Android中的ServiceLoader“无法实例化类”

我在集成ServiceLoader到我的 Android 应用程序以集成插件系统时遇到问题。

从 externalStorage 的 assets 文件夹中复制的 .jar 文件,该类可以访问所有文件,但运行后崩溃

也许有人知道如何解决错误?

0 投票
1 回答
2219 浏览

java - ServiceLoader 未加载新服务

我的 ServiceLoader 不想加载我的新服务。我想我已经正确设置了一切。

核心.主要

核心服务.IService

DbDataBuilder.builder.DbDataBuilder

META-INF/services/service.Iservice

项目结构

但是当我运行它时,控制台输出是:

我有什么问题吗?

0 投票
0 回答
510 浏览

neo4j - 在 glassfish4 中使用 hibernate-ogm-neo4j 时出现异常“提供程序不是子类型”

我试图让 hibernate-ogm-neo4j (5.1.0.Alpha1) 在我的 glassfish (4.1.1) 中运行。当使用 datastorprovider 启动应用程序服务器时,<property name="hibernate.ogm.datastore.provider" value="neo4j_embedded"/>它会显示一个很长的堆栈跟踪,不断重复以下异常:

使用<property name="hibernate.ogm.datastore.provider" value="neo4j_bolt"/>异常更改为

我更喜欢以 Bolt 模式连接,但我不确定我是否配置错误,或者它是否是 hibernate-ogm 或 neo4j 中的错误。

这是我完整的persistence.xml:

更新

我对错误消息进行了更深入的研究。它实际上是在 JavaServiceLoader类中抛出的,并表示类似org.neo4j.driver.internal.spi.Connectoris not a superclass of org.neo4j.driver.internal.connector.socket.SocketConnector. 但当然是

并且在相关中还有一个META-INF.services描述,neo4j-java-driver-1.0.4.jar其中包含路径预期的绝对类名org.neo4j.driver.internal.connector.socket.SocketConnector

这让我更加困惑。我是否必须将此配置应用于我的 Glassfish,因为它不是自动完成的?

更新 2

如果使用,问题就会消失neo4j-java-driver-1.1.0-M6.jar(只需在你的 pom 中声明依赖项,它将被使用而不是 1.0.4。它与 hibernate-ogm-neo4j-5.1.0.Alpha1 捆绑在一起)。虽然仍然不知道版本 1.0.x 有什么问题,但我已经联系了开发人员以找出问题所在。

0 投票
2 回答
1681 浏览

java - ServiceLoader 使用 ClassLoader 指向不同的路径

这几天一直在尝试,但无法正常工作!

我正在尝试构建一个可插入的 Java 应用程序,我可以在其中从命令行运行它并在单独的文件夹中提供插件(jar)。似乎ServiceLoader这符合我的要求,但我认为我需要一种特殊情况,即 jar 不是类路径的一部分,而它们存储在不同的位置,因此我需要使用ClassLoder指向该文件系统的 url小路。

我想提供给主应用程序的插件之一是具有一些自定义功能的日志 jar。

下面是我正在使用的代码,但无法进入 for/loop .. 这意味着ServiceLoader无法识别/匹配任何类实现:

我希望你能帮忙!非常感谢

==== 添加项目文件:

主要可插拔应用:

在此处输入图像描述

“日志”插件

界面Log

其实施

  • 结构

在此处输入图像描述

==================

调整项目结构如下,但仍然不起作用:

主应用: 在此处输入图像描述

扩展应用程序: 在此处输入图像描述