这篇文章是关于这里解释的问题的:
Nifi ExecuteGroovyScript - class already loaded in another classloader
我正在处理同一问题。
要总结一下,当我在Nifi流中的ExecuteGroovyScript处理器中更改Groovy脚本然后重新启动处理器时,我遇到UnsatisfiedLinkError告诉我该lib已经在另一个类加载器中加载了。
如果我重新启动Nifi,则处理器将恢复正常并可以正常工作。
我试图更改库在Java中的加载方式,从“ System.loadLibrary()”切换为“ Runtime.getRuntime()。loadLibrary()”,但无论如何似乎都具有相同的行为。
我还试图在加载lib时捕获java.lang.UnsatisfiedLinkError:
public class PseudoJNI {
static {
try {
System.loadLibrary("pseudojni");
} catch (java.lang.UnsatisfiedLinkError error) {
if (!error.getMessage().contains("pseudojni")) {
throw error;
}
}
}
但是它并没有太大帮助,因为我仍然遇到“ NoClassDefFoundError:无法初始化类”。这是有道理的,因为我阻止它使用try-catch块加载lib。
无法再次将库加载到处理器中,但是需要加载该库以使处理器能够执行作业。 有技巧吗?
可以通过将nifi / lib目录放在上一篇文章中得到的解决。但是出于安全原因,不允许将其放在那里。我们应该使其与存储在classpath目录中的lib一起使用。我们不希望其他所有项目都访问此lib,因此不允许共享目录。
有没有办法解决这个问题?