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

命令行运行Java模块调换-p与-m参数顺序执行失败是否为预期行为?

结论

这是预期内的设计行为,-p和-m的参数顺序确实会直接影响运行结果。

原因解释

Java启动器的参数有严格的位置规则,官方定义的命令语法如下:

java [JVM选项] <主类名> [应用程序参数...]
java [JVM选项] -m <模块名>[/<主类名>] [应用程序参数...]

其中:

  • 所有JVM层面的配置(包括-p/--module-path模块路径配置、-cp/-classpath类路径配置、-X/-XX开头的虚拟机参数等),必须全部放在-m参数或者主类名之前,才会被JVM识别生效。
  • 所有跟在-m参数(及指定的模块名)之后的内容,都会被JVM判定为传递给应用主类的程序入参,不会被解析为JVM配置。

你把-p放到-m后面时,JVM解析到-m my.module.name就已经结束了JVM参数的读取,此时还没有加载你指定的模块路径,自然找不到对应模块,就会抛出Module my.module.name not found错误,而后面的-p "dir/with/module1;dir/with/module2"只会被传入主类的main方法的args数组中,不会起到配置模块路径的作用。

补充说明

所有JVM专属参数都必须放在主类/模块声明之前,不要和应用参数混放,否则都会出现不生效的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:45:03