doris使用ranger权限查询插件,报错java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ClassFilter

doris版本3.0.8,其使用的jdk版本jdk17.

报错内容:

2026-01-23 09:15:44,133 WARN (main|15) [ScriptEngineUtil.initScriptEngineCreator():111] initScriptEngineCreator(): failed to instantiate engine creator org.apache.ranger.plugin.util.NashornScriptEngineCreator
java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ClassFilter
        at java.lang.Class.forName0(Native Method) ~[?:?]
        at java.lang.Class.forName(Class.java:375) ~[?:?]
        at org.apache.ranger.plugin.util.ScriptEngineUtil.initScriptEngineCreator(ScriptEngineUtil.java:107) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.util.ScriptEngineUtil.getScriptEngineCreator(ScriptEngineUtil.java:87) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.util.ScriptEngineUtil.createScriptEngine(ScriptEngineUtil.java:52) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.conditionevaluator.RangerScriptConditionEvaluator.init(RangerScriptConditionEvaluator.java:72) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.conditionevaluator.RangerScriptTemplateConditionEvaluator.init(RangerScriptTemplateConditionEvaluator.java:41) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyevaluator.RangerCustomConditionEvaluator.getPolicyItemConditionEvaluator(RangerCustomConditionEvaluator.java:138) 
~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyevaluator.RangerDefaultPolicyItemEvaluator.init(RangerDefaultPolicyItemEvaluator.java:66) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyevaluator.RangerDefaultPolicyEvaluator.createPolicyItemEvaluators(RangerDefaultPolicyEvaluator.java:1196) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyevaluator.RangerDefaultPolicyEvaluator.init(RangerDefaultPolicyEvaluator.java:137) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyevaluator.RangerOptimizedPolicyEvaluator.init(RangerOptimizedPolicyEvaluator.java:74) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyengine.RangerPolicyRepository.buildPolicyEvaluator(RangerPolicyRepository.java:1087) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyengine.RangerPolicyRepository.init(RangerPolicyRepository.java:903) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyengine.RangerPolicyRepository.<init>(RangerPolicyRepository.java:287) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyengine.PolicyEngine.<init>(PolicyEngine.java:225) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.policyengine.RangerPolicyEngineImpl.<init>(RangerPolicyEngineImpl.java:106) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.service.RangerBasePlugin.setPolicies(RangerBasePlugin.java:370) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.util.PolicyRefresher.loadPolicy(PolicyRefresher.java:263) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.util.PolicyRefresher.startRefresher(PolicyRefresher.java:145) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.ranger.plugin.service.RangerBasePlugin.init(RangerBasePlugin.java:245) ~[ranger-plugins-common-2.4.0.jar:2.4.0]
        at org.apache.doris.catalog.authorizer.ranger.doris.RangerDorisPlugin.<init>(RangerDorisPlugin.java:30) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.authorizer.ranger.doris.RangerDorisAccessController.<init>(RangerDorisAccessController.java:61) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.authorizer.ranger.doris.RangerDorisAccessController.getInstance(RangerDorisAccessController.java:74) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.authorizer.ranger.doris.RangerDorisAccessController.getInstance(RangerDorisAccessController.java:68) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.mysql.privilege.AccessControllerManager.<init>(AccessControllerManager.java:62) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.Env.<init>(Env.java:750) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.EnvFactory.createEnv(EnvFactory.java:71) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.Env$SingletonHolder.<clinit>(Env.java:681) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.catalog.Env.getCurrentEnv(Env.java:842) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.DorisFE.start(DorisFE.java:187) ~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.DorisFE.main(DorisFE.java:97) ~[doris-fe.jar:1.2-SNAPSHOT]
Caused by: java.lang.ClassNotFoundException: jdk.nashorn.api.scripting.ClassFilter
        at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?]
        at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
        ... 32 more

报错原因

ranger-plugin插件在jdk8编译,jre中存在此类jdk/nashorn/api/scripting/ClassFilter,而jdk17中没有了。

解决办法

jdk-1.8/jre/lib/ext/nashorn.jar复制到doris/fe/lib目录重启doris即可。
复制jar后可以使用此命令验证下:find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep jdk/nashorn/api/scripting/ClassFilter -q; then echo "$jarfile"; fi; done

posted @ 2026-01-23 11:06  lisacumt  阅读(19)  评论(0)    收藏  举报