我正在尝试调整一个库以在 Quarkus 本机模式下使用。由于它的反射很重,我需要手动注册某些接口的所有实现。
到目前为止我所做的并且似乎对用户代码有效:
private static void registerAllImplementations(CombinedIndexBuildItem combinedIndexBuildItem,
BuildProducer<ReflectiveHierarchyBuildItem> reflectiveHierarchyClass,
Class<?>... classNames) {
for (Class<?> klass : classNames) {
combinedIndexBuildItem.getIndex().getAllKnownImplementors(DotName.createSimple(klass.getName())).stream()
.map(ci -> new ReflectiveHierarchyBuildItem(Type.create(ci.name(), Type.Kind.CLASS)))
.forEach(reflectiveHierarchyClass::produce);
}
}
但是,下面的行没有选择来自外部 jar 的实现者:
combinedIndexBuildItem.getIndex().getAllKnownImplementors(...)
这不是悲剧,但如果不需要关注某些外部 jar 的内部并确保所有相关实现都手动注册,那么它会更具前瞻性。
你有什么线索吗?