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

Java命令行如何指定多JAR到modulepath?模块路径支持通配符吗?

Java模块路径(modulepath)的多JAR指定与通配符支持问题

我来帮你理清这两个关于Java模块路径的常见疑惑点:

一、如何在modulepath中指定多个JAR文件?

有两种实用方式,你可以根据场景选择:

  • 逐个指定JAR文件:用系统对应的路径分隔符(Windows用;,Unix/Linux/macOS用:)把每个模块JAR的路径分隔开即可。比如在Linux环境下:

    java --module-path module-a.jar:./libs/module-b.jar:../modules/module-c.jar -m com.your.module/com.your.module.Main
    

    另外--module-path可以缩写成-p,所以上面的命令也能简化成:

    java -p module-a.jar:./libs/module-b.jar:../modules/module-c.jar -m com.your.module/com.your.module.Main
    
  • 指定包含模块JAR的目录:如果多个模块JAR都存在同一个目录下,直接指定这个目录路径就行——Java模块系统会自动扫描该目录下所有符合模块规范的JAR(也就是包含module-info.class的JAR)。比如:

    java --module-path ./all-modules-dir -m com.your.module/com.your.module.Main
    

    这种方式比逐个写JAR路径简洁太多,适合模块数量较多的场景。

二、模块路径是否支持通配符?

答案是不支持类路径那种*通配符,这是模块系统的设计逻辑决定的:

类路径的*通配符是为了方便批量加载非模块化JAR,但模块系统强调依赖的显式性和确定性,避免出现依赖冲突或歧义。如果你在模块路径里写了*,Java会把它当作路径的一部分,而非通配符展开,最终会报错找不到对应模块。

那如果目录下有一堆模块JAR不想逐个指定怎么办?其实前面提到的「指定目录」的方式就能解决——直接把目录路径给到--module-path,Java会自动加载目录里所有合法的模块JAR。

另外,如果目录里混有非模块化JAR(没有module-info.class),这些JAR会被当作自动模块处理,Java会自动为它们生成模块名(通常是JAR文件名去掉后缀),同样可以通过指定目录的方式加载到模块路径中。比如:

java --module-path ./mixed-jars-dir -m com.your.module/com.your.module.Main

如果这些非模块化JAR你只想放到类路径,也可以同时搭配--class-path(或-cp)选项:

java --module-path ./modules-dir -cp ./non-modules/* -m com.your.module/com.your.module.Main

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:35:33