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

Java 9 Jigsaw:如何一次性修补不同模块中的类

处理JPMS多模块文件的便捷方案

当然有便捷方法啦!在Java平台模块系统(JPMS)环境下,一次性处理分属不同模块的多个文件,你可以试试下面这几个实用方案:

1. 用模块路径通配符直接批量操作(JDK 9+支持)

如果你的代码已经按照标准JPMS结构组织——每个模块对应一个独立目录,且目录下包含module-info.java——那可以直接用通配符来批量指定模块路径,再配合文件查找命令一次性处理所有源文件。

比如编译命令可以这么写:

javac --module-path mods/* -d out $(find src -name "*.java")

这里mods/*会自动匹配所有模块目录,find src -name "*.java"会递归找出所有Java源文件,一次性完成跨模块的编译操作。

2. 借助构建工具(Maven/Gradle)——生产环境首选

这是工业界最常用的方案,构建工具天生就支持多模块项目的批量管理:

  • Maven:创建一个父POM文件,在其中用<modules>节点声明所有子模块,执行mvn compile就能一键编译所有模块的代码,它会自动处理模块间的依赖关系、路径配置等问题。
  • Gradle:在settings.gradle文件中用include语句指定所有子模块,运行gradle build就能批量完成构建,Gradle还支持更灵活的模块依赖定制。

3. 自定义脚本批量处理

如果你不想用构建工具,也可以自己写个简单的脚本(Shell或Windows批处理)来遍历模块目录,逐个处理:

比如一个Shell脚本示例:

#!/bin/bash
# 遍历所有模块目录
for module_dir in ./modules/*; do
  # 检查当前目录是否是JPMS模块(存在module-info.java)
  if [ -f "$module_dir/module-info.java" ]; then
    # 编译当前模块的所有Java文件,输出到对应模块的输出目录
    mkdir -p ./output/$(basename $module_dir)
    javac -d ./output/$(basename $module_dir) $(find $module_dir -name "*.java")
  fi
done

这个脚本会自动识别包含module-info.java的目录作为JPMS模块,然后分别编译每个模块的文件,最后把编译结果输出到对应模块的专属目录里。

小提醒

  • 要确保每个模块的module-info.java正确声明了依赖,比如如果用到java.util.logging,就需要在模块声明里加上requires java.logging;,否则编译会出现依赖缺失的错误。
  • 如果是运行阶段,同样可以用--module-path通配符配合--module指定主模块来批量运行,或者直接用构建工具的运行命令更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:50