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

Java模块指令与Gradle配置依赖映射:export指令对应关系咨询

Java模块指令与Gradle配置的完整映射解析

官方已明确的4种核心映射

先整理你提供的官方映射表(中文翻译版):

Java模块指令Gradle配置用途
requiresimplementation声明实现依赖
requires transitiveapi声明API依赖(传递暴露)
requires staticcompileOnly声明仅编译依赖
requires static transitivecompileOnlyApi声明仅编译API依赖(传递暴露)

你关心的exports指令对应Gradle配置

exports的作用是控制自身模块内包的对外可见性,和api配置完全不是一个维度的概念:

  • api是依赖管理层面的配置,控制外部依赖是否传递给下游项目
  • exports是模块封装层面的指令,决定自身模块的哪些包能被其他模块访问

在Gradle中,exports并不对应某个依赖配置,而是通过两种方式配置:

  1. 直接在module-info.java中编写指令,Gradle会自动识别并处理:
    module com.example.myapp {
        // 暴露api包给所有模块
        exports com.example.myapp.api;
        // 仅暴露internal包给指定的consumer模块
        exports com.example.myapp.internal to com.example.consumer;
    }
    
  2. 通过Gradle的moduleInfo DSL在构建脚本中配置:
    java {
        modularity.inferModulePath = true
        moduleInfo {
            exports 'com.example.myapp.api'
            exports 'com.example.myapp.internal' to 'com.example.consumer'
        }
    }
    

其他Java模块指令的Gradle等效配置

除了上述指令,常见模块指令的处理方式如下:

  • opens指令:开放包给反射访问,同样支持module-info.java或DSL配置:
    moduleInfo {
        opens 'com.example.myapp.reflection'
        opens 'com.example.myapp.internal' to 'org.junit.jupiter.api'
    }
    
  • uses指令:声明服务接口,结合implementation依赖服务接口后,通过module-info.java或DSL配置:
    moduleInfo {
        uses 'com.example.myapp.service.MyService'
    }
    
  • provides ... with指令:声明服务实现,确保实现类在源码中后,通过module-info.java或DSL配置:
    moduleInfo {
        provides 'com.example.myapp.service.MyService' with 'com.example.myapp.service.impl.MyServiceImpl'
    }
    

关键误区澄清

你之前混淆了exports和api的作用,核心区别是:

  • api管依赖传递:让下游项目能间接访问当前项目依赖的模块API
  • exports管自身暴露:决定当前模块的哪些包可以被外部模块访问

两者没有直接对应关系,分属不同的配置维度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:07:30