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

Java 17模块迁移:requires static为何引发依赖传递报错?

问题分析与解决方案

你对requires static的理解存在一点偏差:它并不是“纯编译时依赖,运行时完全不需要”,准确的定义是编译阶段必须存在该模块,运行阶段仅当你的模块代码实际调用了该依赖模块的API时才需要它。如果模块在运行时没有用到该依赖的任何代码,理论上运行时可以不提供,模块系统不会报错。那ProjectB为什么会抛出找不到Lombok的错误?主要有以下几种可能:

可能的原因

  • ProjectA字节码仍存在Lombok运行时引用:虽然Lombok是编译时代码生成工具,但如果ProjectA里有直接调用Lombok API的代码(比如手动调用Lombok的工具类),或者某些特殊注解需要运行时支持(极少数情况),运行时就必须有Lombok模块。你可以反编译ProjectA的class文件,检查是否存在lombok.*的引用。
  • Eclipse模块处理机制的问题:Eclipse在处理模块依赖时,可能默认把requires static的依赖当成运行时必须的。这种情况下,Eclipse的运行配置会强制要求找到Lombok模块。
  • 模块路径的严格解析:当ProjectB使用模块路径而非类路径运行时,JVM的模块系统会严格解析所有声明的依赖,包括requires static的条目。如果ProjectB的模块路径里没有Lombok,且没有明确标记它为可选,就会触发找不到模块的错误。

解决办法

  1. 确认ProjectA的运行时依赖:先反编译ProjectA的class文件,确认是否真的没有Lombok的运行时引用。如果确实存在引用,那必须在ProjectB的运行时模块路径中加入Lombok。
  2. 修改ProjectB的module-info:在ProjectB的module-info.java中添加requires static lombok;,这样模块系统会将Lombok标记为ProjectB的可选依赖,运行时即使找不到该模块也不会报错。
  3. 调整Eclipse运行配置:打开ProjectB的Run Configuration,切换到Modules标签页,找到Lombok模块,将其标记为Optional(可选),让Eclipse在启动时不强制要求该模块存在。
  4. 升级Lombok版本:确保使用的Lombok版本支持Java 17和模块系统(推荐1.18.28及以上版本),旧版本可能存在模块兼容问题,导致依赖解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:35:15