无法使用Netflix Nicobar库加载字节码文件

时间:2019-06-03 19:15:49

标签: netflix dynamic-class-loaders

Netflix Nicobar开箱即用,具有Groovy编译器和简单的类加载器。 Github中提供的示例仅显示了如何在运行时加载Groovy脚本。在我的项目中,我们需要在运行时从不同业务部门加载jar文件,而不创建一个胖jar。 Nicobar似乎非常适合我的要求。但是我无法使Nicobar能够加载字节码文件。

任何人都可以建议我如何做到这一点。

我将下面的类用于字节码插件

public static final String BYTECODE_PLUGIN_CLASS = "com.netflix.nicobar.core.plugin.BytecodeLoadingPlugin";

ScriptModuleLoader moduleLoader1 = new ScriptModuleLoader.Builder()
            .addPluginSpec(new ScriptCompilerPluginSpec.Builder("bytecode")
            .addRuntimeResource(ExampleResourceLocator.getbyteCodePluginLocation()).build())


            .addListener(new BaseScriptModuleListener() {                // add an example listener for module updates
                public void moduleUpdated(ScriptModule newScriptModule, ScriptModule oldScriptModule) {
                    System.out.printf("Received module update event. newModule: %s,  oldModule: %s%n", newScriptModule, oldScriptModule);
                }
            })
            .build();

269 [ArchiveRepositoryPoller-PollerThread]错误com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller-尝试获取模块ID的存档时发生异常:[HelloWorld] java.lang.NullPointerException     在java.util.AbstractCollection.containsAll(AbstractCollection.java:317)     在java.util.Collections $ UnmodifiableCollection.containsAll(Collections.java:1062)     在com.netflix.nicobar.core.module.GraphUtils.swapVertices(GraphUtils.java:54)     在com.netflix.nicobar.core.module.ScriptModuleLoader.updateScriptArchives(ScriptModuleLoader.java:228)     在com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller.pollRepository(ArchiveRepositoryPoller.java:200)     在com.netflix.nicobar.core.persistence.ArchiveRepositoryPoller $ 2.run(ArchiveRepositoryPoller.java:133)     在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     在java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)     在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:180)     在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)     在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)     在java.lang.Thread.run(Thread.java:748)

0 个答案:

没有答案