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
浙公网安备 33010602011771号