Nifi ExecuteGroovyScript处理器在java.lang.UnsatisfiedLinkError中失败-已在另一个类加载器中加载的类

时间:2019-08-09 12:34:41

标签: java error-handling classloader apache-nifi unsatisfiedlinkerror

这篇文章是关于这里解释的问题的:
 Nifi ExecuteGroovyScript - class already loaded in another classloader

我正在处理同一问题。

要总结一下,当我在Nifi流中的ExecuteGroovyScript处理器中更改Groovy脚本然后重新启动处理器时,我遇到UnsatisfiedLinkError告诉我该lib已经在另一个类加载器中加载了。

1

如果我重新启动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,因此不允许共享目录。

有没有办法解决这个问题?

0 个答案:

没有答案