【问题标题】:Recorder does not fire in native executable记录器不会在本机可执行文件中触发
【发布时间】:2020-09-04 11:43:46
【问题描述】:

在我们的设置中,我们执行一些 STATIC-INIT 构建步骤,包括将所有资源路径添加到对象中的列表中。我们为此使用 Recorder,因为在静态初始化阶段无法访问该对象。在 JVM 模式下,我们看到列表确实包含所有资源路径。但是,在本机模式下并非如此。即使构建日志显示我们迭代了资源并将它们添加到列表中,该列表仍然是空的。

这就是我们的设置:

First:运行时可访问的文件,包含所有资源路径。

@ApplicationScoped
public class ServiceResourcesList {

    private List<String> resources;

    public ServiceResourcesList() {
        resources = new ArrayList<>();
    }

    public void addResource(String resource) {
        this.resources.add(resource);
    }

    public List<String> getResources() {
        return resources;
    }

    public List<String> getResources(Predicate<String> filter) {
        return resources.stream().filter(filter).collect(Collectors.toList());
    }
}

记录器,它返回一个 BeanContainerListener:

@Recorder
public class ServiceResourcesListRecorder {

    public BeanContainerListener addResourceToList(String resource) {
        return beanContainer -> {
            ServiceResourcesList producer = beanContainer.instance(ServiceResourcesList.class);
            producer.addResource(resource);
        };
    }
}

最后是(简化的)构建步骤。请注意,我们使用 BuildProducer,它应确保在应用 Recorder 方法之前已经注册了对象。

@BuildStep
@Record(STATIC_INIT)
void createResourceList(final BuildProducer<BeanContainerListenerBuildItem> containerListenerProducer, ServiceResourcesListRecorder recorder) {

    // Some code to get the resource paths, but this could be anything
    // ...

    for (String resourcePath: resourcePaths) {
        LOGGER.info(resourcePath + " added to recorder");
        containerListenerProducer.produce(new BeanContainerListenerBuildItem(recorder.addResourceToList(resourcePath)));
    }
}

我做错了吗?记录器不打算用于本机可执行文件吗?我应该在某处添加 RegisterForReflection 吗?

谢谢

【问题讨论】:

    标签: java native quarkus graalvm recorder


    【解决方案1】:

    我们改用 RUNTIME-INIT 和静态方法解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2013-06-11
      • 2012-04-11
      相关资源
      最近更新 更多