问题标签 [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.
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;
我难住了。有什么建议吗?谢谢你,佩德罗
java - 带有 maven 的 ServiceLoader,当 pom 中未给出依赖项时
我有一个 Maven 应用程序,我喜欢使用该ServiceLoader
机制来加载插件。
目前,我通过将依赖项添加到 pom 来实现这一点,以便依赖项 jar 在类路径中,并且 ServiceLoader 可以将其拾取。
但是,如果不在 pom 中声明依赖关系,如何实现呢?
我不喜欢用每个要使用的插件来改变 pom。
我该怎么做 - 或者插件 jar 必须始终在 pom 中?
java - java中的泛型和服务
我的应用程序使用 ServiceLoader,我有两种类型的服务:算法和导出器。编码 :
我有另一个类,Executor,它将算法和导出器“连接”在一起:
团队成员为多种类型的事物独立编码算法和导出器。他们把它放在一个罐子里,注册算法或导出器的服务提供者,应用程序的核心在于组合这些模块。
我写了那个小测试:
但我预见到了未来的问题。由于加载器不知道算法或导出器的具体类型,我如何确定两者的组合是兼容的?或者有没有办法根据算法/导出的工作类型来过滤服务加载器中的服务?谢谢
编辑:为了更清楚:假设有人编写了一个模块算法,另一个编写了一个导出器。它们将在 ServiceLoader 中以相同的方式加载。有没有办法区分它们?
java - ServiceLoader 找不到插件
我有一个 ServiceLoader 试图加载任何扩展插件的东西。即使我设置了服务文件,它也没有找到任何东西。
源码(com.otabi.firestar.pajamatale.plugin.loader.PluginFinder
是类):https ://github.com/firestar115/PajamaTale
插件:https ://github.com/firestar115/PajamaTest
我在这里做错了什么?为什么插件不显示并打印“Test Kappa”?
java - ServiceLoader 从不同的包加载
ServiceLocator
我使用 ServiceProviderPattern编写了一个泛型。
如果我将服务作为依赖项添加到ServiceLocator
抵抗的 maven 模块,它只会找到服务。如果这个服务使用它ServiceLocator
本身,我将有一个循环依赖。
我需要ServiceLocator
从未知的依赖项中加载类。
java - Java/Maven - 没有 SeviceLoader 覆盖的撒克逊人
我们正在构建一个公共组件,它是多个其他项目的依赖项。
我们的项目做了一些 XSLT 转换,我们需要使用 Saxon 引擎。
我们可以完全控制必须使用 Saxon 的特定 XSLT 转换,但无法控制依赖于我们的应用程序的类路径,并且我们不想强迫它们使用 Saxon 进行其他 XML 工作。
我们可以在使用这些工厂提供的 API 进行转换时直接手动调用 Saxon 库。
问题是 Saxon 使用该ServiceLoader
模式将自己作为TransformerFactory
实现注入,使用 jar 中的此文件:
这意味着将我们用作依赖项的应用程序最终可能会使用 Saxon 而不是其现有的 XML 库。要求这些应用程序更改其代码以调用其特定实现不是一种选择。
有什么方法可以“覆盖” Saxon 库以删除 ServiceLoader 实现?使用 Maven、Java 或其他进程?
java - Android中的ServiceLoader“无法实例化类”
我在集成ServiceLoader
到我的 Android 应用程序以集成插件系统时遇到问题。
从 externalStorage 的 assets 文件夹中复制的 .jar 文件,该类可以访问所有文件,但运行后崩溃
也许有人知道如何解决错误?
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.Connector
is 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 有什么问题,但我已经联系了开发人员以找出问题所在。
java - ServiceLoader 使用 ClassLoader 指向不同的路径
这几天一直在尝试,但无法正常工作!
我正在尝试构建一个可插入的 Java 应用程序,我可以在其中从命令行运行它并在单独的文件夹中提供插件(jar)。似乎ServiceLoader
这符合我的要求,但我认为我需要一种特殊情况,即 jar 不是类路径的一部分,而它们存储在不同的位置,因此我需要使用ClassLoder
指向该文件系统的 url小路。
我想提供给主应用程序的插件之一是具有一些自定义功能的日志 jar。
下面是我正在使用的代码,但无法进入 for/loop .. 这意味着ServiceLoader
无法识别/匹配任何类实现:
我希望你能帮忙!非常感谢
==== 添加项目文件:
主要可插拔应用:
“日志”插件
界面Log
其实施
- 结构
==================
调整项目结构如下,但仍然不起作用: