含日文DRL文件的Maven项目执行mvn deploy失败但Plexus启动正常,原因是什么?
问题根因
- Maven启动脚本参数传递逻辑差异:你直接在
mvn命令后附加的-Dfile.encoding=UTF-8参数,会被Windows环境下的Maven批处理启动脚本识别为Maven应用参数,而非JVM启动系统属性,最终JVM进程实际启动时并未加载该编码配置,仍然使用操作系统默认编码(日文Windows环境默认多为Shift_JIS)。org.kie插件读取包含日文字符的DRL文件内容、文件名时,使用默认编码解析出现乱码,最终触发解析失败报错。 - 你通过java命令直接启动Plexus Classworlds时,
-Dfile.encoding=UTF-8是直接作为JVM启动参数传入,编码配置生效,因此不会出现乱码问题。
适配方案
你可以通过以下任意一种方式将JVM参数适配到标准mvn命令中:
单次执行生效
Windows CMD环境执行命令前先配置临时环境变量:
set MAVEN_OPTS=-Dfile.encoding=UTF-8 mvn deploy -P deployToDistribution
Windows PowerShell环境执行:
$env:MAVEN_OPTS="-Dfile.encoding=UTF-8" mvn deploy -P deployToDistribution
Linux/macOS环境执行:
export MAVEN_OPTS="-Dfile.encoding=UTF-8" mvn deploy -P deployToDistribution
项目级永久生效
在项目根目录创建.mvn/jvm.config文件,写入以下内容:
-Dfile.encoding=UTF-8
后续在该项目下执行任意mvn命令都会自动加载该JVM参数,无需手动配置。
全局永久生效
在系统环境变量中新增MAVEN_OPTS变量,值为-Dfile.encoding=UTF-8,配置完成后所有mvn命令执行都会生效。
你已配置的<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>配置无需调整,配合上述JVM参数即可解决问题。
内容的提问来源于stack exchange,提问作者cjcjcj1995
相关产品推荐
相关产品推荐

