You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NiFi 1.15.3 Windows下运行bat启动后自动关闭启动失败

问题现象
  • Windows环境下运行bat批处理文件启动NiFi 1.15.3版本时,命令行窗口执行部分指令后自动退出,无法完成正常启动
  • 安装最新版NiFi可正常启动运行,但该版本无ECMAScript相关配置选项,无法满足使用需求
  • 启动日志核心报错如下:
2022-06-03 10:15:23,354 ERROR [main] org.apache.nifi.NiFi Failure to launch NiFi
org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @664f1c53
    at org.xerial.snappy.SnappyLoader.injectSnappyNativeLoader(SnappyLoader.java:297)
    at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:227)
    at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48)
    at org.apache.nifi.processors.hive.PutHiveStreaming.<clinit>(PutHiveStreaming.java:158)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:488)
    at java.base/java.lang.Class.forName(Class.java:467)
    at org.apache.nifi.nar.StandardExtensionDiscoveringManager.getClass(StandardExtensionDiscoveringManager.java:330)
    at org.apache.nifi.documentation.DocGenerator.documentConfigurableComponent(DocGenerator.java:100)
    at org.apache.nifi.documentation.DocGenerator.generate(DocGenerator.java:65)
    at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:1139)
    at org.apache.nifi.NiFi.<init>(NiFi.java:170)
    at org.apache.nifi.NiFi.<init>(NiFi.java:82)
    at org.apache.nifi.NiFi.main(NiFi.java:330)
问题根因

该报错由JDK版本与NiFi 1.15.3不兼容导致。
NiFi 1.15.3发布时官方仅适配Java 8、Java 11两个LTS版本,如果系统默认配置的是Java 17及以上高版本JDK,高版本Java引入的模块化权限机制会默认拦截未命名模块对java.base核心包内部API的反射访问。报错中提到的snappy压缩库是NiFi内置Hive处理器的依赖,启动时需要反射调用ClassLoader.defineClass方法加载本地库,被JVM权限拦截后直接抛出本地库加载失败错误,最终导致启动流程中断、命令行窗口闪退。
最新版NiFi可正常启动,是因为高版本NiFi已经升级了snappy依赖版本、预置了高版本JDK需要的模块放开参数,完成了高版本JDK适配,但高版本移除了ECMAScript相关配置,因此无法匹配使用需求。

解决方法

共两个可选方案,优先推荐第一个:

  • 方案1(官方推荐,稳定性最高):将NiFi 1.15.3运行依赖的JDK切换为Java 8或者Java 11版本,配置系统JAVA_HOME环境变量指向对应JDK的安装路径,重新运行启动bat文件即可正常启动,不会出现依赖加载类报错。
  • 方案2(不更换JDK的临时适配方案):手动修改NiFi启动JVM参数,放开对应模块的访问权限
    1. 进入NiFi安装目录下的conf文件夹,找到bootstrap.conf配置文件用文本编辑器打开
    2. 在文件中找到所有以java.arg.开头的JVM参数配置段,顺着已有参数的最大序号,新增两行配置:
      java.arg.XX=--add-opens=java.base/java.lang=ALL-UNNAMED
      java.arg.XX+1=--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
      
      注意把XX替换为当前文件中已存在的java.arg参数的最大序号+1,不要和已有参数序号重复,否则新增的JVM参数不会被加载生效。例如文件中最后一个参数是java.arg.18,则新增参数序号为19、20。
    3. 保存配置文件后重新启动NiFi,即可绕过JVM模块化权限拦截,正常加载snappy库完成启动。

注意:如果使用方案2启动时后续出现其他同类型module java.base does not "opens xxx" to unnamed module报错,只需要按照报错提示的模块路径,按照相同格式新增对应的--add-opens参数即可。但NiFi 1.15.3本身没有针对高版本JDK做全量兼容性测试,长期生产运行还是建议切换到适配的JDK 8/11版本,避免出现未知运行问题。

参考截图

内容的提问来源于stack exchange,提问作者Shivam Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:45:39