Spring Modulith结合Clean Architecture:Gradle多模块依赖配置疑问
Spring Modulith 1.3.4 开放Domain模块所有子包访问权限的解决方案
针对你遇到的Domain模块所有子包无法被其他模块访问的问题,有两个可行方案:
方案一:直接依赖Domain模块所有子包
在需要访问Domain的模块(Adapters、Infrastructure、Bootstrap)的根包package-info.java中,使用..*语法指定依赖Domain模块的所有子包:
@ApplicationModule(allowedDependencies = "xx.services.domain..*") package xx.services.adapters; // 替换为对应模块的根包路径 import org.springframework.modulith.ApplicationModule;
..*是Spring Modulith的语法,代表目标模块下的所有包及子包,无需在Domain模块额外配置,直接允许其他模块访问Domain的全部内容。
方案二:将Domain所有子包标记为模块API
- 在Domain模块的根包
package-info.java中,通过api属性把所有子包标记为模块的公开API:
@ApplicationModule(allowedDependencies = "", api = {xx.services.domain..*}) package xx.services.domain; import org.springframework.modulith.ApplicationModule;
- 然后在其他模块的
package-info.java中,使用你之前尝试的:: *语法依赖Domain的所有API:
@ApplicationModule(allowedDependencies = "xx.services.domain :: *") package xx.services.infrastructure; // 替换为对应模块的根包路径 import org.springframework.modulith.ApplicationModule;
这个方案更贴合Spring Modulith的模块设计理念,明确Domain的公开边界,同时开放所有子包作为外部可访问的API。
关键说明
你之前使用xx.services.domain :: *未生效,是因为:: *仅针对模块通过api属性声明的公开接口/包。如果Domain模块没配置api包含所有子包,这个语法自然无法识别到子包内容。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

