使用MLCP导入文件至MarkLogic时遇Java字符串索引越界异常求助
MLCP导入MarkLogic时Java字符串越界异常分析
环境信息
- 操作系统:Windows 11
- MLCP版本:10.0.9
- Java版本:
java 19 2022-09-20 Java(TM) SE Runtime Environment (build 19+36-2238) Java HotSpot(TM) 64-Bit Server VM (build 19+36-2238, mixed mode, sharing)
执行命令
mlcp.bat -options_file mlcp_config.txt
错误日志
Exception in thread "main" java.lang.ExceptionInInitializerError at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:440) at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:486) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153) at com.marklogic.contentpump.ContentPump.runCommand(ContentPump.java:120) at com.marklogic.contentpump.ContentPump.main(ContentPump.java:74) Caused by: java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 2 at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55) at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210) at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112) at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349) at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4602) at java.base/java.lang.String.substring(String.java:2715) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:51)
问题原因
- Java版本兼容性问题:MLCP 10.0.9依赖的Hadoop组件未适配Java 19。Hadoop的
Shell类初始化时会执行字符串截取操作,高版本Java的字符串处理逻辑与Hadoop预期不符,触发越界异常。 - 系统环境变量异常:Hadoop会读取Windows的
COMSPEC环境变量,若该变量值长度过短(如为空或仅包含部分路径),会导致字符串截取时的边界检查失败。 - MLCP版本适配不足:MLCP 10.0.9发布时Java 19尚未成为主流版本,官方未针对该版本做兼容性验证,存在未覆盖的场景。
解决建议
- 降级Java版本至MLCP官方推荐的版本(优先选择Java 8或Java 11,具体参考MLCP 10.0.9官方文档)。
- 检查并修复
COMSPEC环境变量,确保其值为完整的cmd.exe路径,例如C:\Windows\system32\cmd.exe。 - 升级MLCP至更高版本,新版本通常会修复对高版本Java的兼容性问题。
内容的提问来源于stack exchange,提问作者Rashmita Purkayastha
相关产品推荐
相关产品推荐

