Java 17+环境下Repast Simphony批量运行如何传递add-opens参数?
解决Repast Simphony批量运行时传递JVM --add-opens参数的问题
针对你遇到的Repast 2.10.0在Java 17环境下批量运行时JVM参数无法传递的问题,可以通过以下几种方式解决:
1. 直接修改批量运行脚本
Repast生成的批量运行脚本(Windows下为.bat,Linux/macOS下为.sh)中,找到启动Java的命令行,手动添加所需的--add-opens参数。
比如原脚本中的启动命令:
java -jar repast-simphony-batch-runner.jar [其他参数]
修改为:
java --add-opens=java.xml/com.sun.org.apache.xpath.internal.objects=ALL-UNNAMED -jar repast-simphony-batch-runner.jar [其他参数]
如果有多个需要开放的模块包,直接追加参数即可,比如:
java --add-opens=java.xml/com.sun.org.apache.xpath.internal.objects=ALL-UNNAMED --add-opens=另一个模块/包=ALL-UNNAMED -jar repast-simphony-batch-runner.jar [其他参数]
2. 通过项目配置文件指定VM参数
找到项目根目录下的batch-run.properties文件(如果没有可以手动创建),添加以下配置:
vmargs=--add-opens=java.xml/com.sun.org.apache.xpath.internal.objects=ALL-UNNAMED
如果需要多个参数,用空格分隔:
vmargs=--add-opens=java.xml/com.sun.org.apache.xpath.internal.objects=ALL-UNNAMED --add-opens=其他模块/包=ALL-UNNAMED
Repast的批量运行器会读取这个配置文件中的vmargs参数,传递给JVM启动命令。
3. IDE中配置批量运行的VM参数(若使用IDE启动)
如果你是通过Eclipse或IntelliJ IDEA等IDE启动批量运行模式:
- 打开对应的运行配置(Run Configuration)
- 找到VM arguments输入框
- 将
--add-opens=java.xml/com.sun.org.apache.xpath.internal.objects=ALL-UNNAMED添加到参数列表中 - 保存配置后重新启动批量运行
补充说明
Java 17的模块系统封装比Java 11更严格,所以必须显式通过--add-opens开放内部包给未命名模块;而Repast的GUI模式和批量运行模式的参数传递逻辑相互独立,GUI中配置的VM参数不会自动同步到批量运行环节,因此需要单独配置。
内容的提问来源于stack exchange,提问作者smlutz2
相关产品推荐
相关产品推荐

