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

Spring Modulith应用中生成的OpenAPI代码包访问权限配置问题

解决Spring Modulith访问生成的OpenAPI包问题

针对生成的restinterfaces包无法手动添加package-info.java的情况,有以下几种可行方案:

1. 配置OpenAPI Generator自动生成带注解的package-info.java

修改openapi-generator-maven-plugin的配置,让插件在生成代码时自动创建包含@NamedInterface注解的package-info.java文件。

在Maven插件配置中添加自定义模板或属性注入:

<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>对应版本号</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
        <generatorName>spring</generatorName>
        <packageName>my.app.restinterfaces</packageName>
        <additionalProperties>
          <additionalProperty>packageInfo=true</additionalProperty>
          <additionalProperty>packageInfoTemplate=${project.basedir}/src/main/resources/templates/package-info.java.mustache</additionalProperty>
        </additionalProperties>
      </configuration>
    </execution>
  </executions>
</plugin>

然后在自定义模板文件package-info.java.mustache中写入:

@org.springframework.modulith.NamedInterface(allowedModules = {"domainA", "domainB"})
package {{package}};

插件生成代码时会自动在restinterfaces包下创建符合要求的配置文件。

2. 手动创建package-info.java并纳入编译路径

在项目源码目录下创建对应包结构src/main/java/my/app/restinterfaces/,添加package-info.java文件:

@org.springframework.modulith.NamedInterface(allowedModules = {"domainA", "domainB"})
package my.app.restinterfaces;

修改Maven的build配置,将源码目录和生成目录同时纳入编译范围:

<build>
  <sources>
    <source>src/main/java</source>
    <source>target/generated-sources/my/app/restinterfaces</source>
  </sources>
</build>

编译时手动创建的配置文件会和生成的代码合并,Spring Modulith即可识别包的访问规则。

3. 编程式配置Spring Modulith模块依赖

如果不想修改生成代码或添加额外文件,可通过代码直接定义模块间的访问权限。创建配置类:

import org.springframework.modulith.core.ApplicationModules;
import org.springframework.modulith.core.NamedInterface;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ModulithConfig {

  @Bean
  public ApplicationModules applicationModules() {
    return ApplicationModules.of(MyApplication.class)
      .modifyModule("restinterfaces")
      .asNamedInterface(NamedInterface.of("restinterfaces").allowedModules("domainA", "domainB"))
      .and();
  }
}

这种方式无需修改生成的包结构,直接通过代码配置模块访问规则。


内容的提问来源于stack exchange,提问作者Sidekick.John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:07:42