Skip to content

libs-java: parent 统一为 failsafe 配 classesDirectory(修 repackage 后 IT 找不到 @SpringBootConfiguration) #30

Description

@JIAQIA

背景

platform-common 验收(真实 mvn verify,Testcontainers 起 PG)时发现:凡使用 spring-boot:repackage + maven-failsafe-plugin 跑集成测试的 Boot 服务,IT 会 100% 失败:

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

根因spring-boot:repackagepackage 阶段)把主 jar 换成可执行 fat-jar,应用类被挪到 BOOT-INF/classes/maven-failsafe-pluginverify 阶段)默认对该 fat-jar 取类,Spring 的 @SpringBootConfiguration 包扫描扫不到入口类 → IT 无法 bootstrap 上下文。

这是跨切坑control-plane / governance / security / data-foundation / privacy-orch / platform-common 以及 libs-java/examples/sample-service 等凡继承本 parent、用 repackage + failsafe IT 的服务都会中。

建议(主仓统一治理)

hashmatrix-platform-parentlibs-java/pom.xml)的 pluginManagement 已管理 maven-failsafe-plugin(仅钉版本)。建议在该条目补默认 configuration,令 failsafe 扫描松散 class 目录而非 repackage 后的 fat-jar:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>${maven-failsafe-plugin.version}</version>
  <configuration>
    <!-- repackage 把应用类挪到 fat-jar 的 BOOT-INF/classes/;failsafe 扫该 jar 会找不到
         @SpringBootConfiguration。指向 target/classes(类在包根)即可命中。 -->
    <classesDirectory>${project.build.outputDirectory}</classesDirectory>
  </configuration>
</plugin>

落到 parent 后,各子仓无需各自发明,且可撤销本地覆盖(见下)。

关联

验收判据

  • parent pluginManagement 的 failsafe 补 classesDirectory,发版(≥ 下一个 libs-java patch)
  • 至少一个子仓(如 platform-common)升级 parent 后撤销本地覆盖、mvn verify 仍绿

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions