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)