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

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

  1. 在Domain模块的根包package-info.java中,通过api属性把所有子包标记为模块的公开API:
@ApplicationModule(allowedDependencies = "", api = {xx.services.domain..*})
package xx.services.domain;

import org.springframework.modulith.ApplicationModule;
  1. 然后在其他模块的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:13:15